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からこのエラーが発生し続けます。
Warning:move_uploaded_file(images/robot.jpg):ストリームを開けませんでした:/var/www/html/mysite/process.phpの78行目で権限が拒否されました
Warning:move_uploaded_file():78行目の/var/www/html/mysite/process.phpの '/ tmp/phpsKD2Qm'を 'images/robot.jpg'に移動できません
ご覧のとおり、アップロードファイルに関してphp.iniファイルから設定を取得することはありません。
私はここで何をしていますか?
これはimages
とtmp_file_upload
がroot
ユーザーのみ書き込み可能だからです。アップロードを機能させるには、それらのフォルダの所有者をhttpdプロセスの所有者と同じにする必要がありますORそれらをグローバルに書き込み可能にします(不適切な方法)。
$ps aux | grep httpd
。最初の列は所有者になり、通常はnobody
になります。images
とtmp_file_upload
の所有者を、nobody
またはステップ1で見つけた所有者に変更します。
$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
ディレクティブについて話していること。
このスクリプトを実行してApacheプロセスの所有者を見つけることもできます。
<?php echo exec('whoami'); ?>
そして、目的のディレクトリの所有者をあなたが持っているものに変更します。以下のコマンドを使用してください。
chown user destination_dir
そしてコマンドを使用します
chmod 755 destination_dir
宛先ディレクトリのアクセス権を変更します。
Mac OS Xをお持ちの場合は、ファイルルートまたはWebサイトのフォルダに移動します。
それからそれを右クリックして、情報を得て、一番下に行き(共有と許可)、それを開いて、すべて読み取り専用に変更読み書きする。必ず南京錠を開き、設定アイコンに移動して、囲まれた項目に適用を選択してください...
このフォルダの権限を変更する
# chmod -R 0755 /var/www/html/mysite/images/
これを以前の提案に追加したいと思いました。 SELinux が有効になっているLinuxのバージョンを使用しているなら、シェルでこれを実行する必要があります。
chcon -R --type httpd_sys_rw_content_t /path/to/your/directory
あなたのWebサーバーにグループまたはディレクトリの所有者を変更することによってユーザー権限を与えることに加えて。
これは私のために働きました。
Sudo adduser <username> www-data
Sudo chown -R www-data:www-data /var/www
Sudo chmod -R g+rwX /var/www
その後、ログアウトまたは再起動してください。
SELinux
が文句を言うなら、以下を試してください
Sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www(/.*)?'
Sudo restorecon -Rv '/var/www(/.*)?'
私はすでに問題なくcomposerを実行した後でさえも、この関連問題に出くわしました。私は作曲家を更新しました、そしてcomposer install
またはphp composer.phar install
を実行するとき、私は得ました:
...ストリームを開くことができませんでした:アクセス許可が拒否されました...
多くの調査の結果、フォルダに対するアクセス許可の変更に関する以前の回答がうまくいったことがわかりました。それらは現在わずかに異なるディレクトリです。
私のインストールでは、OS Xでは、キャッシュファイルは/Users/[USER]/.composer/cache
にあり、キャッシュファイルはrootが所有していたので、私は問題を抱えていました。 '.composer'の所有権を私のユーザーに再帰的に変更することで問題は解決しました。
これは私がしたことです:
Sudo chown -R [USER] cache
それから私は作曲家のインストールを再び実行し、そして大丈夫!
これを試して:
/ etc/Apache2/envvarsを開きます。
Sudo gedit /etc/Apache2/envvars
www-data
をあなたのyour_username
に置き換えます
"export Apache_RUN_USER=www-data"
と置換する
export Apache_RUN_USER='your_username'
この問題は、Apacheユーザー(www-data)がフォルダに書き込む権限を持っていない場合に発生します。この問題を解決するには、ユーザーをグループwww-dataの中に入れる必要があります。
私はちょうどこれを作りました:
このPHPコード<?php echo exec('whoami'); ?>
を実行して、Apacheが使用しているユーザーを見つけてください。その後、端末でコマンドを実行します。
user@machine:/# cd /var/www/html
user@machine:/var/www/html# ls -l
これは次のようになります。
total of files
drwxr-xr-x 7 user group size date folder
私はユーザーを維持しましたが、グループをwww-dataに変更しました
chown -R user:www-data yourprojectfoldername
chmod 775 yourprojectfoldername
解決策はとても簡単です。 IMAGE(インストール先)フォルダを右クリックし、プロパティに移動し、許可タブをクリックして、他のユーザーのアクセスをファイルの作成と削除に変更します。
これを試して
find /var/www/html/mysite/images/ -type f -print0 | xargs -0 chmod -v 664
Tmp_file_uploadのパーミッションを755に変更するだけです。以下はchmod -R 755コマンドです。tmp_file_upload