2

次のコードでは、$ outputは、各行の終わりに改行文字を含む、各804文字の長さの行の文字列です。各行の454の位置に「Y」があります。「はい」のように、それは単なる古い「Y」です。

$fh = fopen($filename_with_path,"w");
fwrite($fh,$output);
fclose($fh);

何らかの理由で、作成されたファイルを表示すると、出力全体が無傷であるように見えますが、位置454は空白であり、「Y」はどこにも見つかりません。

上記のコードの前または後にdie($ output)を設定でき、出力には「Y」が含まれます。スクリプトに$outputの内容を電子メールで送信してもらいましたが、それには「Y」が含まれていました。しかし、作成されたファイルを見ると(そして、スクリプトを実行するたびに新しく作成されていることを確認しました)、「Y」の代わりに空白があります。(「cat」を使用して、またメモ帳で開いたWebダウンロードとしてファイルシステム上のファイルを確認しましたが、「Y」はありません。

作成されたファイルに2行ある場合、長さは1608バイトです。これは、各行に804があるため、意味があります。したがって、これにより、Yが空白に置き換えられているように見えます。出力には、ファイル内で正常に表示される他のYがあります。

私はこれに完全に困惑しています。何か案は?

ありがとう!

4

1 に答える 1

0

うーん。私はそれを考え出した。奇妙さには必ず理由があります。それを理解する必要があります。

この場合、ファイルが Web アクセス可能なディレクトリにコピーされる前に、tmp ディレクトリに作成されました。Web ディレクトリ ファイルには、スクリプトが実行されるたびに一意のファイル名が付けられましたが、tmp ディレクトリ ファイル名にはありませんでした。

スクリプトを手動で実行したため、tmp ディレクトリ内のファイルは私が所有していました。次に、Web (ファイルを作成するスクリプト) からスクリプトを実行すると、ファイルを上書きする権限がなく、コード内のエラー チェックが不足していたため、やけどを負いました。毎回同じ (古い) ファイルが Web ディレクトリにコピーされていましたが、そのファイルには新しいタイムスタンプがあったため、新しいコンテンツであると考えました。

いくつかの教訓 (再) 学習: 常に適切なエラー チェックを行う! そして、何かがおかしいとき、それはあなたであり、サーバーでも、プログラミング言語でも、グレムリムでもないことを知っておいてください!!

StackOverflow コミュニティに感謝します。

于 2012-11-09T19:15:12.320 に答える