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

问题是这段代码有效。对于我使用它的三分之二的页面,它工作正常。问题是当我第三次复制并粘贴它以再次实现它时,由于某种原因,文件是在服务器上创建的,除了没有数据写入文件。我不认为这是客户端的问题,因为我在 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 之前设置所有内容、文件夹、文本文件,但我仍然得到相同的结果;该文件已制作,但没有数据写入其中。有什么我遗漏的东西或任何其他可能有帮助的方法。我在谷歌上没有找到任何东西,并且仍然对为什么相同的代码完全按预期工作两次感到困惑,然后突然无缘无故停止。

提前致谢。

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 回答
0

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

尝试提供相对于您的域根目录的绝对路径或路径来创建文件,例如,

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

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

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

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

于 2017-08-24T09:44:02.703 回答