web-dev-qa-db-ja.com

php file_put_contents関数が機能しない

File_put_contentsが次のコードの動作を拒否するのはなぜですか?

$f = file_put_contents("files/r.js", "Some text here");

if ($f) print 1;
else print 0;
30
steve

許可の問題である可能性があります

ディレクトリは/files 777に変更しましたか?十分な権限がない場合、phpがディレクトリへのアクセスを許可しない場合があります。ただし、空白エラーについては知りません。

十分なアクセス許可があるかどうかを確認し、そうでない場合は、777に設定して試してください。

45
Famver Tags

ファイルシステムでフルパスを使用していますか、またはURIを使用しようとしていますか?このPHP関数は、ファイルがファイルシステムで見つかったときにパスを指定することを期待しています。

ただし、相対パスは問題ないはずです。

ファイルが存在し、そのアクセス許可が777に設定されていることを確認する必要がある場合があります。ディレクトリアクセス許可を777に設定するだけでは不十分であることがわかりましたが、ファイルも既に存在している必要があります。

3
jmort253

これを経験したので、回避策が必要です(方法、アクセス許可、およびここで言及したその他のものに関係なく)。他のすべての修正が失敗した場合、SELinuxによって作成された制限にリンクできることがわかりました。

1
designgroop

Windowsを使用している場合、php 5.5.38を実行しているWindows 10では次のソリューションが完全に機能しました。

Windows/IISでこの問題が発生している場合は、次を試してください。

  1. 書き込もうとしているフォルダーに移動して右クリックし、プロパティを選択します。
  2. [セキュリティ]タブを選択します
  3. 編集をクリックします
  4. 追加をクリックします
  5. 詳細設定をクリックします
  6. [検索開始]をクリックします
  7. ユーザーのリストから「IUSR」を選択し、「OK」をクリックします
  8. もう一度[OK]をクリックします。
  9. IUSRは、「ユーザー名のグループ」というラベルの付いた一番上のボックスに表示されます。
  10. IUSRを選択し、「BATCHのアクセス許可」リストビューで必要なアクセス許可を付与します。
  11. [適用]をクリックして完了です。

手順は、ウィンドウのバージョンによって若干異なる場合があります。これはASP.NETにも当てはまりますが、追加するユーザーはネットワークユーザー(ネットワークAND ORネットワークサービスユーザー)およびIUSRであると思います。

0
user2288580