CentOS 上の Apache 2.2 と PHP 5.3 を使用してアップロード ディレクトリを設定しようとすると、このエラーが繰り返し発生します。
php.ini の場合:
upload_tmp_dir = /var/www/html/mysite/tmp_file_upload/
httpd.conf の場合:
Directory /var/www/html/mysite/tmp_file_upload/>
Options -Indexes
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<Directory /var/www/html/mysite/images/>
Options -Indexes
</Directory>
CentOS ディレクトリの権限:
drwxrwxr-x 2 root root 4096 Nov 11 10:01 images
drwxr-xr-x 2 root root 4096 Nov 12 04:54 tmp_file_upload
何をしても、ファイルをアップロードするときに PHP から次のエラーが発生し続けます:
警告: move_uploaded_file(images/robot.jpg): ストリームを開けませんでした: /var/www/html/mysite/process.php の 78 行目でアクセスが拒否されました
警告: move_uploaded_file(): /var/www/html/mysite/process.php の 78 行目で '/tmp/phpsKD2Qm' を 'images/robot.jpg' に移動できません
ご覧のとおり、アップロード ファイルに関する php.ini ファイルからの構成は取得されませんでした。
ここで何が間違っているのでしょうか?
ベストアンサー1
これはimages
、 と がユーザーtmp_file_upload
によってのみ書き込み可能であるためですroot
。アップロードを機能させるには、これらのフォルダーの所有者を httpd プロセス所有者と同じにするか、グローバルに書き込み可能にする必要があります (これは悪い習慣です)。
- Apacheプロセスの所有者を確認してください:
$ps aux | grep httpd
最初の列は所有者です。通常はnobody
の所有者
images
を、手順 1 で見つけた所有者に変更しtmp_file_upload
ます。nobody
$sudo chown nobody /var/www/html/mysite/images/ $sudo chown nobody /var/www/html/mysite/tmp_file_upload/
chmod を実行
images
し、tmp_file_upload
必要に応じて所有者が書き込みできるようにします [すでにこの設定が行われているようです]。@Dmitry Teplyakov の回答で言及されています。$ sudo chmod -R 0755 /var/www/html/mysite/images/ $ sudo chmod -R 0755 /var/www/html/mysite/tmp_file_upload/
この動作が発生する理由の詳細については、マニュアルを参照してください。http://php.net/manual/en/ini.core.php#ini.upload-tmp-dir
open_basedir
指令についても言及していることに注意してください。