web-dev-qa-db-ja.com

PHP mkdirでディレクトリを作成できません

以前に動作していたPHPスクリプトで、mkdirを使用してディレクトリを作成できます:

$webfolder = "/var/www/html/images/user";
mkdir($webfolder, 0770);

フォルダの権限設定にいくつか変更を加えました/var/www/html/images現在:

drwxrwx---. myself Apache system_u:object_r:httpd_sys_content_t:s0 images

以前、このフォルダはApacheが所有していたと思います。しかし、Apacheはユーザーグループとして読み取り、書き込み、実行の完全な権限を持っているので、なぜその中にフォルダを作成できないのか疑問に思います。 mkdirを使用すると、falseブール値が生成されます。

問題はディレクトリの所有権によるものですか、それとも他の理由がありますか? PHPバージョン5.4を使用していることに注意してください。

エラーログが追加されました:

[Mon Dec 17 11:12:34 2012] [error] [client 127.0.0.1] PHP警告:mkdir():33行目の/ var/www/html/uploadでアクセスが拒否されました、リファラー: https://mywebsite.com/referer

11

答えは目の前で見つめていますが、SELinuxに慣れていないので見逃しています。

SELinuxコンテキストタイプは、フォルダーがApacheで読み取りと書き込みの両方ができるように、httpd_sys_content_rw_tではなくhttpd_sys_content_tとして設定する必要があります。コンテキストを再帰的に変更するには、次のコマンドを使用します。

# chcon -R -t httpd_sys_content_rw_t /var/www/html/images

やれやれだぜ。それがこれに出くわす他の人を助けることを願っています。

30

CentOS7 VM、PHP5.4.16/Apache 2.4.6/mariadb 5.5.44では、smartyテンプレートディレクトリはコンパイル済みテンプレートファイルを生成するために書き込み可能ではなく、以下のエラーが発生していました(/ var/log/httpd/error_log内):

[Thu Mar 31 12:36:08.201383 2016] [:error] [pid 13094] [client 192.168.212.65:52204] PHP Fatal error:  Smarty error: unable to write to $compile_dir '/var/www/html/app1/templates_c'. Be sure $compile_dir is writable by the web server user. in /var/www/html/app1/libs/smarty/Smarty.class.php on line 1093

したがって、PHPアプリケーションは空白の画面を表示していました。

chmod 777 templates_cも機能しませんでした。しかし、@ Question Overflowの提案によると、このVM)のWebルートでのアクセス許可は問題を解決しました。

私は実行しなければなりませんでした:

[root@appserver html]# chcon -R -t httpd_sys_content_rw_t /var/www/html

もちろん、templates_cとcacheはApacheユーザーが所有する必要があります。

drwxr-xr-x.  2 Apache apache     6 Mar 31 12:56 templates_c
drwxr-xr-x.  2 Apache apache     6 Mar 31 12:56 cache

半日以上過ごした後、これに出くわしました。ありがとう

0
NBhat