2016-10-04 8 views
1

私は私のPC上で実行中の仮想サーバ(Oracleの仮想ボックス)のインスタンス内のUbuntuシステム上で実行されている。この愚かな小さなテストPHPスクリプトを持っている:fopenがファイルを作成するため、なぜfwriteが失敗しますか?

<? 
error_reporting(E_ALL); 
ini_set('display_errors', 1); // show errors 

echo "<p>test</p>"; 

$filename = "andy.txt"; 
$fh = fopen($filename, 'w') or die('fopen failed'); 
fwrite($fh, "qwerty") or die('fwrite failed'); 
fclose($fh); 
?> 

設定されているすべての適切なディレクトリとファイルのアクセス権にもかかわらず、それをfwriteで失敗しています。 fopenが動作してファイルを作成するので、書き込みアクセスは明確に有効になりますが、fwriteが終了し、 'fwrite failed'メッセージが出力されます(他のエラー出力は表示されません)。

実際のサーバーにアップロードすると、同じスクリプトが正常に動作するため、ファイルに書き込まれない理由は完全にわかりません。おそらく、問題を引き起こしている仮想サーバーに関するものです。

このような哀れなもののようですが、それは私をナットにしています!かなりの時間にグーグルが答えを出していないので、ここで誰かが何らかの洞察を提供できますか?どうもありがとう。

+1

もしも何かエラーが発生した場合、 'die( 'fwrite failed')'部分を削除してください。 – Clay

+0

SELinuxを有効にしていますか? – NaeiKinDus

答えて

2

なぜfwrite()コールが死んでしまうのか分かりません。書き込まれたバイト数が返されるためです。

つまり、代わりにfile_put_contents()で試してみましたか?これは、ファイルへの書き込みの簡単な方法だし、それ5.
はあなただけ

$filename = "andy.txt"; 
if(!file_put_contents ($contents, $filename)) { 
    // Write failed! 
} 

開くと、ファイルポインタをクローズすると気にする必要はありません次の操作を行う必要があり、早期PHP以来、推奨される方法です、それは関数によって自動的に処理されるからです。 :)

1

解決済み!私の仮想サーバー上のディスクスペースエラーでした。私の心の後ろには、書いたことのある問題として他のところで言及されているのを見たことが分かっていましたが、この場合、私は接続に失敗しました。

@ChristianFありがとうございました! file_put_contents()に切り替えても失敗しましたが、意味のあるエラーメッセージが表示されました:

'file_put_contents(): Only 0 of 6 bytes written, possibly out of free disk space' 

Aha!成長するログファイルが問題になる可能性があることを思い出して、私は/ var/log内のすべてを(それを保存した後に)削除し、Presto!それは今働く!そのヒントをありがとう - 今からfile_put_contentsの使用に切り替えます。 BTW:error.log自体の内容は2GBでしたが、/ var/logの残りのサイズは約15MBでしたが、error.logを単独で削除しても機能しませんでしたので、すべてを削除しました。

@Clayton Smithありがとうございましたが、 "またはdie( 'fwrite failed')」部分を削除しても、それ以上のエラー情報は生じませんでした。これはとてもイライラしています。スクリプトの開始にはあまり効果がなかったようだ。

@NaeiKinDusありがとうございますが、私はSELinuxを実行しているとは思いません(私はこれについて何も知らないと思います)。私は/ etc/selinuxディレクトリを持っていますが、設定ファイルはありません。ちょうどスケルトンsemanage.confのように見えます。 sestatusなどのコマンドは認識されません。

+0

ああ、有益なエラーメッセージが大好き。 :)私は助けてくれると嬉しく思っています。あなたが戻ってきて、本当の問題が何かを私たちに知らせてくれたことを感謝します。 :) – ChristianF

+0

おっと!まだ解決されていません。作成したすべてのログを削除すると、それ自体の問題になります。Apacheがログファイルを見つけられなかったために失敗しました.MySQLは今起動しませんが、それは私が推測する別の話です。 – schenken

+0

Heh、それは典型的なことではありません...私は、サーバー上でログのローテーションを設定することをお勧めします、長期的に多くの面倒を保存します! – ChristianF

関連する問題