GNU/Linux >> Linux の 問題 >  >> Linux

file_put_contentsがtxtファイルを作成していません

私は最近同じ問題を抱えていて、この質問に出くわしました。残念ながら、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

Linux
  1. 名前がファイルリストの行と一致しないディレクトリ内のすべてのファイルを削除しますか?

  2. ディレクトリ付きの猫ファイル?

  3. Tar:サブフォルダーを作成せずに単一のファイルをディレクトリに抽出しますか?

  1. エラー:Tcl.hが見つかりません(そのようなファイルまたはディレクトリはありません)?

  2. ファイル:コマンドが見つかりません

  3. コアがダンプされましたが、コア ファイルが現在のディレクトリにありませんか?

  1. Cで新しいディレクトリを作成する

  2. .txt ファイルに書き込みますか?

  3. シンボリック リンクがフォルダーではなくファイルを作成するのはなぜですか?