1

私はPHPで関数を書いています.クライアント側にはキャンバス画像があり、 toDataUrl() をファイル名とともに使用してサーバーに画像を保存します。コードは次のとおりです。

<?php
  $imageData=$GLOBALS['HTTP_RAW_POST_DATA'];
  $data = json_decode($imageData, true);

  $file = $data["file"];
  $image = $data["data"];

  $filteredData=substr($image, strpos($image, ",")+1);
  $unencodedData=base64_decode($filteredData);

  $fp = fopen( 'image/' . $file , 'wb' );
  fwrite( $fp, $unencodedData);
  fclose( $fp );
?>

問題は、このコードが機能することです。そして、私がそれを使用したページの 3 つのうち 2 つでは、問題なく動作します。問題は、3 回目にコピーして貼り付けて再度実装したときです。何らかの理由で、ファイルにデータが書き込まれないことを除いて、ファイルがサーバー上に作成されます。javascriptにデバッグアラートメッセージを書き込み、PHPにデバッグエコーを書き込み、どちらもデータを正常に出力できるため、クライアント側の問題ではないと思います。この短いデバッグ ファイルを作成しました。

<?php
$fp = fopen('data.txt', 'wb');
if(is_writable('data.txt')){
    echo "file is writable<br>";
}
if(fwrite($fp, 'test') == FALSE){
    echo "failed to write data<br>";
}
fclose($fp);
?>

そして、出力は

file is writable
failed to write data

0777 に書き込む前に、chmod を使用してすべて、フォルダー、テキスト ファイルを設定しようとしましたが、それでも同じ結果が得られます。ファイルは作成されますが、データは書き込まれません。私が見逃しているものや、役立つ可能性のある他のアプローチはありますか? 私はグーグルで何も見つけていません.なぜ同じコードが2回期待どおりに機能したのか、明らかな理由もなく突然停止した理由についてはまだ困惑しています.

前もって感謝します。

4

3 に答える 3

9

これが古い投稿であることは知っていますが、非常によく似た問題があり、解決策を見つけました(少なくとも私にとっては)!サーバーのディスク容量が不足したため、0 バイトのファイルを作成できましたが、書き込みができませんでした。スペースを空けた後(13GBのerror.logファイルを削除)、すべてが期待どおりに再び機能し始めました。

fopen が機能するのに fwrite が不思議なことに機能しない場合は、ディスク容量を確認してください。「df -h」は、Linux サーバーのディスク容量をチェックするコマンドです。

于 2014-01-16T18:57:53.437 に答える
0

$fp = fopen('data.txt', 'wb');ギブ$fp = fopen('data.txt', 'w');アンドトライの代わりに

「wb」を「w」に変更

于 2013-01-17T08:39:20.193 に答える