2

これは私のシステム構成と、それによってapache/phpがどのように影響を受けるかについての質問です。開発サーバーで機能していたコードは、本番環境に移行したときに機能しませんでした。これが、エラーを要約した問題です。phpでfile_put_contentsを使用して、システム上にファイルを作成したいと思います。これが私が使用している非常に単純なコードです:

print file_put_contents("testfile.txt","this is my test")?"made file":"failed";

エラーはスローされませんが、常に「失敗」と出力されます。通常のディレクトリで実行するとファイルは作成されませんが、777権限のあるディレクトリに移動すると、ファイルは作成されますが、「失敗」と出力され、何も保存されません。phpファイル自体を777権限を持つように変更しても、何も変更されません。ターゲットファイル(testtext.txt)を777権限を持つように変更しても、何も変更されません。

phpファイルの所有者を作成したtestfile.txtと同じになるように変更しても、何も変わりません。相対パスと絶対パスを試しても何も変わりません。何らかの理由で、phpにファイルを作成させることはできますが、ファイルは常に空であり、file_put_contentsを使用して何も書き込むことができません。

作成されたファイルは、「www-data」の所有者とグループにありますが、それが役立つ場合は、rootとして機能しています。これを機能させるにはどうすればよいですか?私のバージョンのphpは、これが何か関係がある場合はsuhosin拡張機能を使用していると思います(または、phpまたはsuhosin iniファイルでこれを修正する方法があると思う場合は、私もそれを行うことができます)。

私はここ数日何時間もこれを探してきました。

編集:以下のコメントに基づいて更新します。CLIモード実行すると機能しますが、apacheで実行する必要があるため、このファクトをどのように使用できますか?これは、ファイルの書き込みを停止している場所または原因について何か教えてくれますか?また、file_put_contents呼び出しは、実際にはゼロではなく「false」を返しています。

4

2 に答える 2

1

apacheユーザーの権限を777に設定する必要があります。Apacheは、新しいファイルを「作成」できる必要もあります。777のアクセス許可を持つファイルに書き込もうとすると、うまくいくと確信しています。

于 2012-07-13T23:28:00.027 に答える
1

この関数は、ファイルに書き込まれたバイト数を返します。失敗した場合はFALSEを返します。

それが書き込み可能であることを確認してくださいmydir(apacheユーザー-apache2またはwww-data)。コンテンツがファイルに書き込まれたかどうかを確認するには、===演算子を使用します。

$file = "mydir/testfile.txt";

$result = file_put_contents($file,"this is my test");

if ($result === false)
{
  echo "failed to write to $file";
}
else
{
  echo "successfully written $result bytes to $file";
}

デバッグのために、phpファイルの先頭でこれを定義することをお勧めします。

error_reporting(-1);
ini_set('display_errors', true);
于 2012-07-13T23:28:36.857 に答える