私は最近同じ問題を抱えていて、この質問に出くわしました。残念ながら、OP はコメントで、彼は自分の解決策を見つけて、私たちの助けにならない答えを受け入れたと言いました...その後、検索と file_put_contents の作成に成功しました もう一度作業してください。解決策を共有することにしました。
私のファイルとディレクトリのアクセス許可は、書き込みを受け入れるのに問題ありませんでした (ディレクトリが chmod 757
であることを確認してください) これにより、ルートとその他が得られます その場所にファイルを書き込む権限)。それでも動作しない場合は、システムがおそらく SELinux である可能性があります (Security Enhanced Linux) システム。
必ず setenforce 0
と書きたい場合 これにより、selinux が許容モードになり、スクリプトが再度実行されます。機能する場合は、問題が十分に説明されていることを意味します。
その場合、selinux を setenforce 1
に戻します。 ls -Zl
を試してみてください プロジェクトのディレクトリがあるディレクトリに。これにより、次のような行が得られます
drwx---r-x. 9 root root system_u:object_r:httpd_sys_content_t:s0 4096 Dec 8 00:25 project
または別の httpd_sys_content_t
chcon
を使用した場合 あるディレクトリからこのディレクトリにコンテキストを転送します。 httpd_sys_content_t
がない場合 いずれにせよ、そのディレクトリのコンテキストを変更する必要があるため、問題ありません。
最初に public_content_rw_t
を受け入れる必要があります ファイルを書き込むコンテキスト。タイプ
setsebool -P httpd_anon_write on
これにより、(永続的に) SELinux boolean httpd_anon_write
が設定されます true および public_content_rw_t
と呼ばれる任意のコンテキスト
ここで、プロジェクト ディレクトリが public_content_rw_t
であることを SELinux に伝える必要があります。 そうしないと、まだファイルを書き込むことができません。タイプ:
semanage fcontext --add --type public_content_rw_t "/project(/.*)?"
と restorecon -RvF /project
selinux に伝える 上記の仕様を適用します。
これで、ディレクトリは public_content_rw_t になりました ファイルを書き込めるはずです。
問題は、指定したファイルの場所への書き込み権限が apache にないことが原因である可能性があります。そのディレクトリに移動し、ls
で権限とグループの所有権を確認します コマンド:
cd "My working file location"
ls -l .
出力には、ディレクトリのアクセス許可、所有者、およびグループを示す 3 つの列があります。ほとんどの場合、それらは root によって所有されており、apache
に対する権限を持っていません。 ディレクトリに書き込みます。
この場合、ファイルを作成しようとすると、Apache ログにエラーが表示されます。ブラウザでスクリプトを実行しながら、ログを追跡してみてください:
tail -f /var/log/apache2/error.log