- 1. 【Vagrant/Mac】ローカルと仮想マシンのフォルダを共有/同期する方法
- 2. JavaScriptのString.lengthをPHPで実装する
- 3. Laravel×Reactの環境構築
- 4. さくらサーバで指定ディレクトリだけPHPバージョン変更している際にBASIC認証除外が効かなくなる問題
- 5. CakePHP上でJavascriptによるタグ機能実装
- 6. CodeIgniter4をインストール (Composer利用)
- 7. 【PHP】連想配列の特定の要素を取り出す
- 8. in_arrayとDateTimeクラス、DateTimeImmutableクラスのわな
- 9. PHPによる簡易的な図書管理システム作成(制作中)
- 10. 正则写配置文件常见的漏洞
- 11. PHP ハッシュ化された値と通常の文字列を比較する
- 12. Ubuntu 20.04 oci8 for phpインストールエラーの対処
- 13. MySQL + phpMyAdminのデータベースでAUTO_INCREMENTを使ってみる
- 14. PHP ~ちょっと忘れがちな基礎文法集~
- 15. 【PHP8.0】PHPでアトリビュート/アノテーション/デコレータが書けるようになる
- 16. wordpressの管理と公開で異なるドメインにしたらWP REST APIがエラーになる場合の対処
- 17. Laradock環境構築
- 18. phpberewでバージョン管理する
- 19. PHP 値のハッシュ化を行う
- 20. PHPでの文字列の連結について(びっくり)
【Vagrant/Mac】ローカルと仮想マシンのフォルダを共有/同期する方法
##執筆にあたり
自己紹介も含め、簡単に今の状況を書きます。
実務でPHPを使うことになったので、まずはパーフェクトPHPで学習を進めようと思っている駆け出しです。
折角なので(ローカルを汚したくないという思いもあり)、Vagrantを使った仮想環境で学習しようと決意。
ただ、いちいちvagrantにsshログインしてviで開発していくのも面倒だと思ったので、ローカルと仮想マシンでフォルダ同期が出来ることを知り、、、
色々調べるも古い情報だったり、パスの記述方法が違ったり(環境によりけりなんですかね?)して、ハマったので備忘録として残します。##前提条件
macOS Catalina 10.15.3
Vagrant 2.2.7ここまでに至る環境構築については以下を参照しました。
わかりやすかったです。ありがとうございます!(勝手にリンク失礼します)
[Vagrant+VirtualBoxで仮想環境を構築し、PHPの実装内容をブラウザで確認する](https://qiita.com/nemui_/items/de5dd5feee95e60aa264)上記の手順を一通
JavaScriptのString.lengthをPHPで実装する
## TL;DR
PHPでは以下のように実装する。
“`php
strlen(mb_convert_encoding($string, ‘UTF-16’)) / 2;
“`## JavaScriptのString.lengthの仕様
JavaScriptの内部ではUTF-16が用いられているが、PHPでは一般的にデフォルトがUTF-8である。
さらにJavaScriptの`String.length`とPHPの`mb_strlen`などではカウント方法が異なるため、バリデーション周りで問題を起こしやすい。[String.length – JavaScript \| MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/length) にはこう書いてある。
> このプロパティは、文字列内のコード単位の数を返します。UTF-16(JavaScript によって使われるフォーマット)は、基本的な文字を表すためには 1 つの 16 ビットを使用します
Laravel×Reactの環境構築
# この記事を読んで出来ること
バックエンドにPHPのフレームワークであるLaravelを、フロントエンドにJavaScriptのフレームワークであるReactを用いたウェブアプリ開発をするための環境構築。
※今回はmacOSを用いて環境構築を行っています。## Composerをインストールする
まずはLaravelをインストールために用いるComposerをインストールします。Composerとは、PHP開発で使用するライブラリやパッケージを管理するツールで、macOSではHomebrewでインストールすることが出来ます。インストールが完了してバージョン情報が表示されるか確認しておきましょう。“`
$ brew install composer
$ composer -V
“`## Laravelプロジェクトを作成する
次に、composerを用いてLaravelプロジェクトを作成します。プロジェクトの作成にはcreate-projectを用います。“`
$ composer create-project laravel/laravel “プロジェクト名”
$
さくらサーバで指定ディレクトリだけPHPバージョン変更している際にBASIC認証除外が効かなくなる問題
# 前提
さくらサーバのマネージドプラン(他のプランは調べてない)は、以下のようにすることで指定ディレクトリ以下のPHPのバージョンを任意に指定することができる。
“`:/webルート/.htaccess
Action myphp-script /php.cgi
AddHandler myphp-script .php
“`“`:/webルート/php.cgi
#!/bin/sh
exec /usr/local/php/7.3/bin/php-cgi
“`# 問題
`/webルート/.htaccess`で除外認証を設定しつつ、`/webルート/api`ディレクトリのBASIC認証除外するために以下のファイルを設置したが、BASIC認証が解除されない。“`/webルート/api/.htaccess
Satisfy any
order allow,deny
allow from all
“`# 解決方法
`/webルート/.htaccess`のBASIC認証部分に以下を追記する。“`:/webルート/.htaccess
CakePHP上でJavascriptによるタグ機能実装
#今日やること
* tag表示(サーバからtagのデータを取得してtag一覧表示)
* tagsを取得する* javascriptで追加tagのデータをサーバに送信
* tagの送信が終わった後に、コールバックで(tagを再度表示)
#CakePHP2でjavascript
* jshelper(非推奨 CakePHP3からはなくなる)
* htmlヘルパーで書く方法 “`HtmlHelper::script(mixed $url, mixed $options)¶
“`* webrootにかく
* 直接書く#htmlヘルパー js
* “`$this->Html->scriptStart(array(‘inline’ => false)); $this->Html->scriptEnd(array(‘inline’ => false));“`
* javascriptだけで書くの難しいっぽい。調べ不足
* jsを外部定義する
* javascriptだけで書けそう#tag表示
###done
* jsでf
CodeIgniter4をインストール (Composer利用)
#新しいCodeIgniter使ってみませんか?
CodeIgniter4(以下、CI4。前バージョンはCI3と記します。)、ついに正式リリースされましたね。
Namespaceが採用されたことでClassを作りやすくなったり、CI3よりかなり現代風な実装になった感じです。
自分の会社でもCI3は開発案件で利用していて大変役立っていましたが、CI4ではどうなのでしょうか?
早速触っていきたいと思います。#CI4の動作環境
とりあえずPHP 7.2以上環境に– php-intl
– php-json
– php-mbstring
– php-mysqlnd
– libcurlあたりを導入しておくと良いと思います。
DBはMySQL(5.1以上。もちろんMariaDBでもOK)、PostgreSQL、SQLite3が対応しています。
これらはRedHat/CentOS系の方はyumやdnfで、Debian系の方はaptで簡単に導入できます。
Mac/Windowsの方はMamp、Xampp、MacPorts、Homebrewなんでもお好きな方法で導入可能です。なお、今回はL
【PHP】連想配列の特定の要素を取り出す
GW前ですが超初心者向けにちょっとした配列操作を書きます。
“`
Array
(
[0] => TESTArray Object
(
[name] => math[count] => 5
)
[1] => TESTArray Object
(
[name] => history[count] => 10
)
[2] => TESTArray Object
(
[name] => science[count] => 20
)
)
“`
上の配列から
**科目(name)が歴史だった場合、歴史の人数(count)を取得する**
コードをForeachを使用して書くと“`
foreach($arr as $i) {
if($i->name == “history”) return $i->c
in_arrayとDateTimeクラス、DateTimeImmutableクラスのわな
“`php5
$a = (new \DateTime(“2020/5/1”))->setTime(0,0,0, 0);
$array = [(new \DateTime(“2020/5/1”))->setTime(0,0,0,0)];
var_dump(in_array($a, $array)); // -> true
var_dump(in_array($a, $array, true)); // -> false$a = (new \DateTimeImmutable(“2020/5/1”))->setTime(0,0,0, 0);
$array = [(new \DateTimeImmutable(“2020/5/1”))->setTime(0,0,0,0)];
var_dump(in_array($a, $array)); // -> true
var_dump(in_array($a, $array, true)); // ->false
“`
PHPによる簡易的な図書管理システム作成(制作中)
#PHPによる簡易的な図書管理システム作成(制作中)
独学によりPHPに関して一通りの学習が終了したので、復習もかねて簡易的な図書管理システムを作成しました。
githubにて制作過程を公開中 https://github.com/shimada-ryusuke/book
現在はユーザー情報及び図書の登録、編集、削除まで実装済です。(4月28日時点)
#制作の経緯
PHPとデータベースを駆使したサービスとしてオーソドックスなものがないか考え、今回は一般的な市民図書館などで使用されているようなシステムを作成してみようと思いました。
#機能紹介
~編集中~(4月28日時点)
1.ユーザーログイン画面
メールアドレスとパスワードを入力してログイン後、マイページへ進みます。
マイページ画面
![マ
正则写配置文件常见的漏洞
之前ATEAM发了《这是一篇“不一样”的真实渗透测试案例分析》文章,其中dz的getshell的部份利用的就是对于配置文件正则处理不当,然后P牛的博客也写了一篇 [经典写配置漏洞与几种变形](https://www.leavesongs.com/PENETRATION/thinking-about-config-file-arbitrary-write.html)
本文总结下在正则下写文件常见的错误。
## 无单行/s+贪婪模式
“`php
PHP ハッシュ化された値と通常の文字列を比較する
# 目的
– 文字列をハッシュ化する方法はすでにまとめた為、ハッシュ化された値と平文で入力された値がマッチするかの処理方法をまとめる
– ※ハッシュ化の方法について知りたい方はこちら→[PHP 値のハッシュ化を行う](https://qiita.com/miriwo/items/9f75d9544acbc40bb0a7)# 実施環境
– ハードウェア環境
| 項目 | 情報 |
| — | — |
| OS | macOS Catalina(10.15.3) |
| ハードウェア | MacBook Pro (16-inch ,2019) |
| プロセッサ | 2.6 GHz 6コアIntel Core i7 |
| メモリ | 16 GB 2667 MHz DDR4 |
| グラフィックス | AMD Radeon Pro 5300M 4 GB Intel UHD Graphics 630 1536 MB |– ソフトウェア環境
| 項目 | 情報 | 備考 |
| — | — | — |
| PHP バージョン | 7.4.3 | Homwbr
Ubuntu 20.04 oci8 for phpインストールエラーの対処
##はじめに
Ubuntu 18.04⇒Ubuntu 20.04のバージョンアップに伴い、phpが7.2⇒7.4にバージョンアップされたので、phpにoci8の設定をしたときに発生したときの対処メモ##エラー内容
https://gist.github.com/Yukibashiri/cebaeaccbe531665a5704b1b34a3498e
を参考に、インストールをすすめたが、“`
pecl install oci8
“`
で以下のエラーが発生“`
In file included from /tmp/pear/temp/oci8/oci8.c:49:
/tmp/pear/temp/oci8/php_oci8_int.h:58:10: fatal error: oci.h: No such file or directory
58 | #include
| ^~~~~~~
compilation terminated.
make: *** [Makefile:194: oci8.lo] Error 1
ERR
MySQL + phpMyAdminのデータベースでAUTO_INCREMENTを使ってみる
## はじめに
`PHP`の勉強しているときに`phpMyAdmin`で管理してる`MySQL`のデータベースには`AUTO_INCREMENT`という便利機能があることを知った。
早速、やってみよう!!## AUTO_INCREMENTとは
簡単に言えば、自動割り当て。
カラムでの値を指定しなければ`MySQL`が自動で整数を割り当ててくれる。
1,2しか入ってないカラムなら`AUTO_INCREMENT`では3が割り当てられる。## MySQL + phpMyAdminのデータベースでAUTO_INCREMENTを使ってみる
### データベース初期設定
まずは`phpMyAdmin`で新規データベース、テーブルの作成
PHP ~ちょっと忘れがちな基礎文法集~# 概要
ちょっと忘れがちな基礎文法をまとめました!
随時、更新していきます。## ファイルの初めに書くやつ
“`sample1.php
が必要?>
“`
“`sample2.php
は必要ない!ルールです。“`
## 文字列に変数を埋め込む時
文字列に変数を埋め込む時、「’ ‘」と「” “」とでは埋め込み方が違う!#### sample1.php「’ ‘」の場合 : 「.」ドットを変数の前につける
“`sample1.php
【PHP8.0】PHPでアトリビュート/アノテーション/デコレータが書けるようになる
[Attributes v2](https://wiki.php.net/rfc/attributes_v2)というRFCが投票中です。
投票期間は2020/05/04まで、投票者の2/3の賛成で受理されます。
2020/04/27時点では賛成48反対1で、ほぼ間違いなく可決されます。# Attributes v2
## Introduction
このRFCは、クラス/プロパティ/関数/メソッド/引数/定数の宣言に、構造化されたアトリビュートをメタデータとして記述できるようにする提案です。
アトリビュートは、コードの宣言に直接設定ディレクティブを埋め込むことで定義されます。同じような概念としてJavaの*Annotation*、C#/C++/Rust/Hackにおける*Attribute*、Python/Javascriptにおける*Decorator*が存在します。
これまで、PHPではこのようなメタデータとしては非構造的であるdoc-commentsしか存在しませんでした。
しかしdoc-commentsはただの文字列であり、言語によって解釈されることはありません。
wordpressの管理と公開で異なるドメインにしたらWP REST APIがエラーになる場合の対処
– 現象
– wordpressのwordpressアドレスとサイトアドレスで異なるドメインにしていたら、
投稿画面でエラーになる参考: wordpressの閲覧URLと管理URLで異なるホストを設定
https://qiita.com/backgroundcolor/items/fb7b5ce8cba9794c460f– 原因
– wordpress ver.5の投稿画面は [WP REST API](https://ja.wp-api.org/) を利用している
– なぜだか APIのアドレスが 「閲覧URL(サイトアドレス)/wp-json/wp/〜」 なので、投稿画面のドメインと異なるため、認証が通らずエラーとなる
– 対応
– function.php に、管理画面操作時は WP REST API のドメインを置換する処理を入れる“`php:function.php
/* 管理画面での APIのドメインを変更 */
add_filter( ‘rest_url’, ‘rest_url_replace’ );
function rest_ur
Laradock環境構築
Mac OS X Catalina 10.15.4
初めて頑張ってLaradockで環境構築していきたいと思います。
おかしなところがありましたらぜひ指摘してください。##Laradockをクローン
まずは専用のディレクトリ作成して移動します。
“`
$ mkdir laratest
“`“`
$ cd laratest
“`そこでgit clone。
“`
$ git clone https://github.com/LaraDock/laradock.git
“`##LaraDockの.envファイル作成
そしたら“`laradock“`というファルが作成されているはずなので、そこに移動します。
“`
$ cd laradock
“`
その中にある“`env-example“`ファイルを“`.env“`としてコピーします。“`
$ cp env-example .env
“`laraDockファイルの中はいろんなソフトがめっちゃ入ってます。
nginx, mysql, php, laravelだけなら特に“`.
phpberewでバージョン管理する
# phpもrubyみたいにバージョン管理したい
一番最初に触れた言語はphpでその時は環境構築までやってちょっとチュートリアルやって挫折したと言う経験が昔ありました。で、その時はローカルに思いっきりphpを落としてきて、色々ごちゃごちゃ設定したりしていたわけですが、rubyを勉強して使うようになってからrbenvの存在を知り、バージョン管理するツールがあることを知ったので、phpにもそう言うのないかと思ったら、phpbrewなるものがあることを教えてもらったので、インストールから、やっていきました。物凄い使い方を理解するのに時間がかかりました。以下は、そのエラーや何やらの対処を書いてあります。結論からいきたい方は、使い方の結論から読んでください。
## phpbrewのインストール
公式のgithubには、丁寧にインストール前に必要なものが指定されているので、こちらをまずやっていきます。
macには、2項目のみだったので、楽にできます。[Requirement](https://github.com/phpbrew/phpbrew/wiki/Requirement)
`
PHP 値のハッシュ化を行う
# 目的
– PHPにて任意の値のハッシュ化を行う方法をまとめる
# 実施環境
– ハードウェア環境
| 項目 | 情報 |
| — | — |
| OS | macOS Catalina(10.15.3) |
| ハードウェア | MacBook Pro (16-inch ,2019) |
| プロセッサ | 2.6 GHz 6コアIntel Core i7 |
| メモリ | 16 GB 2667 MHz DDR4 |
| グラフィックス | AMD Radeon Pro 5300M 4 GB Intel UHD Graphics 630 1536 MB |– ソフトウェア環境
| 項目 | 情報 | 備考 |
| — | — | — |
| PHP バージョン | 7.4.3 | Homwbrewを用いて導入 |
| Laravel バージョン | 7.0.8 | commposerを用いて導入 |
| MySQLバージョン | 8.0.19 for osx10.13 on x86_64 | Homwbrewを用いて導入 |– 上記環境にてL
PHPでの文字列の連結について(びっくり)
##この記事を書いた理由
現在、PHP教材を執筆していて初めて知ったことがあったので残しておこうと思います。##PHPでの文字列+変数の出力について
例えば、変数`$name`に`”yamada”`という文字列を代入して`Hello!yamada`という文字列を出力するケースを試します。“`php:sample.php
“`上記の`実行結果`を見ていただければわかると思いますが、
文字列+変数の出力の方法で一般的に知られているのは2つ目の“`php