PHPから外部ファイルに書き込む練習で次のようなソースを作成した。
// ファイル書き込み $testFile = "test.dat"; $contents = "Hello World! \n"; if (is_writable($testFile)) { // ファイルオープン if (!$fp = fopen($testFile, "a")) { echo "could not open!"; exit; } // 書き込み if (fwrite($fp, $contents) === false) { // "===" 厳密な"==" echo "could nor write!"; exit; } echo "success!"; fclose($fp); } else { echo "not writable!"; exit; }
Webブラウザからローカル開発環境にあるPHPを実行すると
試しにコンソールからローカル開発環境にログインしてPHPを実行すると
書き込みできている。
Webブラウザからはダメでローカル開発環境内ではOKということは、ファイル配置先の権限設定に問題があるのかも。
ファイルやディレクトリの権限設定を見る方法を調べると、
早速コマンドを打ってみる。
test.dat の権限を細かく見てみると
各権限を表す3桁の意味は次の通り。
ということで、書き込み先のファイル test.dat にwritable権限を追加してみる。
使用するコマンドは
WebブラウザからPHPを実行してみると
test.dat の中身を見てみると
ということで今回はローカル開発環境の権限設定を学習した。
ついでに権限設定で疑問を抱いたこと。
しかし実際には、書き込み対象のファイル(今回は test.dat )に対して書き込むことができるという意味だ。
ならばむしろ「変更可能」という表現にした方が誤解がないように思える。
not writable!
試しにコンソールからローカル開発環境にログインしてPHPを実行すると
と上手くいっている様子。
書き込み先の test.dat の中身を見てみると
書き込みできている。
Webブラウザからはダメでローカル開発環境内ではOKということは、ファイル配置先の権限設定に問題があるのかも。
ファイルやディレクトリの権限設定を見る方法を調べると、
ls -lというコマンドを発見。
早速コマンドを打ってみる。
test.dat の権限を細かく見てみると
①[ - ] ②[ r w - ] ③[ r w - ] ④[ r - - ]という4パーツに分けられる。
①[ - ] 対象がファイル("-")かディレクトリ("d")か今回はWebブラウザから、つまり外部からのアクセスなので④が関係していると思われる。
②[ r w - ] オーナー権限
③[ r w - ] グループ権限
④[ r - - ] その他ユーザー権限
各権限を表す3桁の意味は次の通り。
r:readable 読み込み可能このことから test.dat には外部ユーザーから書き込み権限がないことが分かる。
w:writable 書き込み可能
x:executable(?) 実行可能
-:該当の権限を持たない
ということで、書き込み先のファイル test.dat にwritable権限を追加してみる。
使用するコマンドは
chmod [変更後の権限状態] [変更対象のファイル名]変更後の権限状態は②〜④の権限状態をそれぞれ2進数から8進数に直した値を設定する。
②:[ r w - ] → [ 1 1 0 ](2進数) → [ 6 ](8進数)
③:[ r w - ] → [ 1 1 0 ](2進数) → [ 6 ](8進数)
④:[ r w - ] → [ 1 1 0 ](2進数) → [ 6 ](8進数)
→ [変更後の権限状態]:666
権限変更が反映されたことを確認。
WebブラウザからPHPを実行してみると
success!
test.dat の中身を見てみると
書き込みが追加されている。
ということで今回はローカル開発環境の権限設定を学習した。
ついでに権限設定で疑問を抱いたこと。
writable 書き込み可能という言葉を見ると、書き込み命令を出す側(今回はPHP)が他のファイルに対して書き込むことができるという印象を受けた。
しかし実際には、書き込み対象のファイル(今回は test.dat )に対して書き込むことができるという意味だ。
ならばむしろ「変更可能」という表現にした方が誤解がないように思える。
0 件のコメント:
コメントを投稿