PHP fwrite()不起作用

时间:2013-01-17 07:40:30

标签: php fwrite

我在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 );
?>

问题在于此代码有效。对于我使用它的三个页面中的两个,它工作得很好。问题是当我第三次复制并粘贴它以再次实现它时,由于某种原因,文件是在服务器上创建的,除了没有数据写入文件。我不认为这是客户端的问题,因为我在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

我尝试使用chmod并设置所有内容,文件夹,文本文件,然后写入0777,我仍然得到相同的结果;制作文件但没有数据写入其中。我有什么遗漏或任何其他可能有帮助的方法。我没有在谷歌上找到任何东西,我仍然感到困惑,为什么相同的代码完全按预期两次突然停止没有明显的原因。

提前致谢。

3 个答案:

答案 0 :(得分:9)

我知道这是一个老帖子,但我有一个非常类似的问题并找到了解决方案(至少对我而言)!我的服务器上的磁盘空间不足,所以它可能会创建一个0字节的文件,但不会写入它。在我清除了一些空间(删除了一个13gb的error.log文件)后,一切都按预期重新开始工作。

如果fopen有效,但fwrite神秘地没有,请检查你的磁盘空间。 'df -h'是检查linux服务器上磁盘空间的命令。

答案 1 :(得分:0)

而不是$fp = fopen('data.txt', 'wb');$fp = fopen('data.txt', 'w');并尝试

将“wb”更改为“w”

答案 2 :(得分:0)

当您为域名website.com撰写$fp = fopen('data.txt', 'w');时,如果php文件位于/ var / www / website / php / server / file / admin,则在/ var / www / website /上有根。 php或类似的东西,它实际上会在/var/www/website/data.txt创建一个文件

尝试提供相对于域根目录的绝对路径或路径来创建像

这样的文件

$fp = fopen('php/server/file/data.txt', 'w');

尝试使用find命令查看文件是否是在Ubuntu中使用以下内容在文件夹目录中的任何其他位置创建的,

  

查找/ var / www / website / -name'data.txt'

我有这个问题,如果你有类似的问题,可能可以帮助你解决。