ホームページ  >  記事  >  バックエンド開発  >  ファイルを作成するためにサーバー上で file_put_contents を実行すると false が返されるのはなぜですか? ファイル ディレクトリが 777 のアクセス許可に設定されているのはなぜですか?

ファイルを作成するためにサーバー上で file_put_contents を実行すると false が返されるのはなぜですか? ファイル ディレクトリが 777 のアクセス許可に設定されているのはなぜですか?

WBOY
WBOYオリジナル
2016-06-23 14:01:043808ブラウズ

file_get_contents を使用してネットワーク上の画像ファイルを読み取り、file_put_contesnts を使用してローカル サーバーに書き込む場合、file_get_contesnts は問題なく実行できます。情報を読み取り、読み取ったデータ $data を実行できます。
var_dump(file_put_contents) ($local_file_position, $data )); テストではvar_dumpの情報が表示されるのですが、結局file_put_contentsがfalseを返してしまうのです。これは本当ですか?その場合、どのように設定すればよいですか?

環境:CentOS 6.5 + MySQL5.5.35 + tomcat7.0.47


ディスカッションへの返信(解決策)

追記すると、書き込むファイルのパスのパーミッションは777に設定されています

絶対パスを使用しますか?それとも相対パスを使用しますか?

絶対パスと相対パスは同じです

まず、file_get_contents()で取得したデータが存在するか、データ型が正しいか確認してください。

これでデータが存在することが確認されました。fopen と fwrite を使用しても、まだ問題があります。

権限が十分ではないと推定されます
echo substr(sprintf('%o', fileperms('your directory')), -4); //結果を確認してください

絶対パスと相対パスは同じです
要件 書き込み可能な場合、ファイルが配置されているディレクトリにも書き込み権限が必要です
たとえば、/home/centos/123.txt
123.txt だけでなく、ディレクトリ home と centos にも書き込み権限が必要です書き込み権限

権限が不足していると思われます
echo substr(sprintf('%o', fileperms('your directory')), -4); //結果を見てください

Return 0755

推定です権限が不十分であることを確認します
echo substr(sprintf ('%o', fileperms('your directory')), -4); //結果がどうなるかを確認してください

777 に変更すると、実行結果が返されます。

0777

file_put_contents 失敗すると明確なメッセージが表示されます エラーメッセージ出力
投稿してください

php ファイル t.php はディレクトリ (絶対パス) /usr/local/www/wxtest に配置されます
$fp=fopen('txt/test.txt', 'wb');
if($fp) fwrite($fp, "TESTSETST");
else echo "ファイルの作成に失敗しました。
";

Windows ブラウザのアドレスに直接 php ファイルを入力します
次のように:
警告: fopen(txt/test.txt): ストリームを開けませんでした: /usr/local/www/wxtest/t.php の 87 行目で許可が拒否されました
警告: fclose() はファイルの作成に失敗します。パラメータ 1 は、/usr/local/www/wxtest/t.php の 90 行目で指定されるブール値です。



プロンプトは非常に明確です。

許可が拒否されました

アクセスが拒否されました
にファイルを書き込みたいとします。 /usr/local/www/wxtest/txt ディレクトリ
ディレクトリが存在し、書き込み可能であることを確認してください

ディレクトリの権限は 777 権限に設定されています。
そして、上位ディレクトリの権限が不十分になるのを防ぐために、/usr/local/www/wxtest/txt 内のすべてのディレクトリを書き込み権限も含めて 755 に設定しましたが、それでも機能しませんでした。

1. 755 権限は rwxr-xr-x を指し、同じグループであり、他のユーザーには書き込み権限がありません。 777 は、すべてのユーザーがすべての権限を持っていることを意味します。

2. ファイルを書き込む前に、パスがスクリプトに存在するかどうかを確認し、存在しない場合は、まずパス (ディレクトリ) を作成してからファイルを書き込みます。 。


1. 755 権限は rwxr-xr-x を指し、同じグループであり、他のユーザーには書き込み権限がありません。 777 は、すべてのユーザーがすべての権限を持っていることを意味します。

2. ファイルを書き込む前に、パスがスクリプトに存在するかどうかを確認し、存在しない場合は、まずパス (ディレクトリ) を作成してからファイルを書き込みます。 。


権限を 777 に変更しても機能しません。道は確かに存在します。

/usr/local/www/wxtest/txt を 777 に設定します

/usr/local/www/wxtest/txt を 777 に設定します

/usr/local/www/wxtest/txt を 777 に設定します


777 に設定します

Apache で設定する必要があるもの、またはシステムの他の場所で設定する必要があるものはありますか?

グループ外のユーザーの権限は 777 ですか?

グループ外のユーザーの権限は 777 ですか?

グループ外のユーザーは他のグループではないですか?どういう意味ですか?

はは、解決しました、ご協力ありがとうございます!

はは、解決しました、ご協力ありがとうございます!
どうやって解決しましたか?シェアしてもらえますか?


はい、解決しました。
問題を解決する方法を教えていただけますか?
デフォルトでは、SELinux のステータスを確認します:
1. /usr/sbin/sestatus -v
2 , getenforce ## これを使用することもできます。確認するコマンド
SELinux をオフにする:
1. 一時的にシャットダウンします (マシンを再起動する必要はありません):
setenforce 0 ## SELinux を許可モードに設定します
##setenforce 1 SELinux を次のように設定しますenforcing モード
2. 設定を変更します。 ファイルを使用するにはマシンの再起動が必要です。
/etc/selinux/config ファイルを変更します
SELINUX=enforcing を SELINUX=disabled に変更します
マシンを再起動するだけです

さらに、上記の手順を実行できない場合は、解決しました。ディレクトリのアクセス許可ポリシーを設定します
chcon -R -t httpd_sys_content_t /home/html

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。