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 に配置されます
php header("Content-type: text/html; charset=utf-8 ");
$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 は、すべてのユーザーがすべての権限を持っていることを意味します。
1. 755 権限は rwxr-xr-x を指し、同じグループであり、他のユーザーには書き込み権限がありません。 777 は、すべてのユーザーがすべての権限を持っていることを意味します。
権限を 777 に変更しても機能しません。道は確かに存在します。
/usr/local/www/wxtest/txt を 777 に設定します
/usr/local/www/wxtest/txt を 777 に設定します
777 に設定します
Apache で設定する必要があるもの、またはシステムの他の場所で設定する必要があるものはありますか?
グループ外のユーザーの権限は 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