我在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,我仍然得到相同的结果;制作文件但没有数据写入其中。我有什么遗漏或任何其他可能有帮助的方法。我没有在谷歌上找到任何东西,我仍然感到困惑,为什么相同的代码完全按预期两次突然停止没有明显的原因。
提前致谢。
答案 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'
我有这个问题,如果你有类似的问题,可能可以帮助你解决。