ファイルを作成して、debugというフォルダーにメッセージを書き込もうとしています。
function debug($report){
$file="/debug/debug.txt";
file_put_contents($file,$report,FILE_APPEND | LOCK_EX);
}
デバッグフォルダは私のルートディレクトリにあります。しかし、ファイルは作成されません。なぜですか?
このコードは、フォルダーのすべてのアクセス許可を開きます。
chmod('PATH_TO_FOLDER',0777);
そのフォルダーで正確に何をしたいかによっては、特定のユーザーのみが読み取り/書き込みできるように、わずかに制限されたアクセス許可を与えることを検討してください。
PHP マニュアルから抜粋したその他の例を次に示します - http://php.net/manual/en/function.chmod.php
<?php
// Read and write for owner, nothing for everybody else
chmod("/somedir/somefile", 0600);
// Read and write for owner, read for everybody else
chmod("/somedir/somefile", 0644);
// Everything for owner, read and execute for others
chmod("/somedir/somefile", 0755);
// Everything for owner, read and execute for owner's group
chmod("/somedir/somefile", 0750);
?>
これは本当に Lixの回答に対するコディシルです。
これの最も一般的な理由は、mpd_php5 を使用して Apache でスクリプトを実行している場合です。これは、php プロセスが apache UID (www-data
またはその他) として実行されるためです。ただし、デフォルトでは、デバッグ ディレクトリは 755 権限を持つアカウントによって所有されます。
アクセス許可を 777 に設定することは、誰でもディレクトリにファイルを作成できるようになるため、悪い習慣であることをお勧めします。代わりに、一時的にアクセス許可を 777 に設定してから、Q&D スクリプトを使用してファイルを作成し、debug/logs
そのアクセス許可を 755 に設定します。デバッグ ディレクトリを 755 に戻します。
debug/logs
ディレクトリが Apache UID によって所有され、任意の Apache プロセスから書き込むことができる ことがわかります。
ここでの問題の 1 つは、スクリプトを使用して古いデバッグ ファイルを削除する必要があることです。これは、自分のアカウントにはこれを行う権限がないためです。
表示されていないエラーがphp構成に起因している可能性がある場合は、そのコードに問題はありません。エラーレポートエラーレポートを参照してください。
通常、パーミッションが原因である可能性があります(デバッグフォルダのパーミッションを参照)。