0

解決策が見つからないように見える問題があります。フラットテキストファイルに書き込もうとしています。画面にすべての変数をエコーアウトし、ユーザー (www-data) のアクセス許可を確認し、フォルダー全体のすべてを 777 に設定しましたが、すべて役に立ちませんでした。最悪の部分は、別のファイルから同じ関数を呼び出すことができ、書き込みます。ここで共通のスレッドを見つけることができません.....

function ReplaceAreaInFile($AreaStart, $AreaEnd, $File, $ReplaceWith){
$FileContents = GetFileAsString($File);
$Section = GetAreaFromFile($AreaStart, $AreaEnd, $FileContents, TRUE);
if(isset($Section)){
    $SectionTop = $AreaStart."\n";
    $SectionTop .= $ReplaceWith;
    $NewContents = str_replace($Section, $SectionTop, $FileContents);

    if (!$Handle = fopen($File, 'w')) {
        return "Cannot open file ($File)";
        exit;
    }/*
    if(!flock($Handle, LOCK_EX | LOCK_NB)) {
        echo 'Unable to obtain file lock';
        exit(-1);
    }*/
    if (fwrite($Handle, $NewContents) === FALSE) {
        return "Cannot write to file ($File)";
        exit;
    }else{
        return $NewContents;
    }
}else{
        return "<p align=\"center\">There was an issue saving your settings. Please try again. If the issue persists contact your provider.</p>";
}
}
4

2 に答える 2

0

試してみてください...

$Handle = fopen($File, 'w');
if ($Handle === false) {
    die("Cannot open file ($File)");
}
$written = fwrite($Handle, $NewContents);
if ($written === false) {
    die("Invalid arguments - could not write to file ($File)");
}
if ((strlen($NewContents) > 0) && ($written < strlen($NewContents))) {
    die("There was a problem writing to $File - $written chars written");
}
fclose($Handle);
echo "Wrote $written bytes to $File\n"; // or log to a file
return $NewContents;

また、エラー ログで問題がないかどうかを確認します。エラーログを有効にしていると仮定すると、何かがあるはずです。

PHP では fwrite は次のように動作するため、書き込まれた文字数を確認する必要があります。

完全に false の戻り値が期待される場合に、fwrite() が 0 を返すという問題が発生した後、php の fwrite() 自体のソース コードを調べました。無効な引数を渡した場合にのみ、関数は false を返します。パイプの破損や接続の切断など、その他のエラーの場合は、ほとんどの場合 0 の strlen($string) 未満の値が返されます。

また、ファイルに書き込んでいる可能性がありますが、書き込もうとしている別のファイルに書き込んでいる可能性があることに注意してください。絶対パスは、これを追跡するのに役立つ場合があります。

于 2012-12-03T06:57:17.037 に答える