【问题标题】:fwrite PNG creates file with zero bytesfwrite PNG 创建零字节文件
【发布时间】:2014-04-24 23:46:15
【问题描述】:

我有一个“导出”自定义脚本,可以输出一堆各种格式的 highcharts 图表,包括 .xls、.png 和 .PDF。该脚本在我的个人笔记本电脑上完美运行,但是当我尝试在客户的公司 cpu / 网络上运行它时,PNG 导出失败。

我很确定这不是权限问题。该脚本创建PNG文件并根据需要删除它们,我可以看到这些文件被添加到可写文件夹中,然后被删除。只是文件都是0kb。脚本完成后,应该组合所有 PNG 的文件也是 0kb。

因此,我认为这是 fwrite 功能的问题,但我很困惑为什么它在我的笔记本电脑上工作,但在客户端 cpu 上却没有。这可能是浏览器问题吗?他们使用 IE 9。以下是相关代码:

    <?php

/**
 * 
 */
class actions_exportcsv {



    private static function hcexport($post_string) { //echo $post_string; die;
        // curl init
        $ch = curl_init("http://export.highcharts.com/");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt_array($ch, array(
            CURLINFO_HEADER_OUT => true,
            CURLOPT_POST => 1,
//            CURLOPT_HTTPHEADER     => array(
//                "Content-Type: multipart/form-data; boundary=---------------------------26008479621944;",
//                "Content-Length: ".  strlen($post_string).";",
//            )
        ));
        // curl exec
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        //set data to be posted
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
        $data = curl_exec($ch);
        $resultStatus = curl_getinfo($ch);
        //print_r($resultStatus);  
        curl_close($ch);
        return $data;
    }

}

?>

希望您能帮助我并阐明正在发生的事情...祝您有美好的一天!

编辑:请在下面找到错误日志的相关位:

[19-Mar-2014 01:57:39 Europe/Berlin] PHP Deprecated:  mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in C:\xampp\htdocs\Raptor\xataface\Dataface\Application.php on line 576
[19-Mar-2014 01:57:39 Europe/Berlin] PHP Notice:  Undefined variable: ENV in C:\xampp\htdocs\Raptor\actions\exportcsv.php on line 177
[19-Mar-2014 01:57:39 Europe/Berlin] C:/xampp/htdocs/Raptor/18.png
[19-Mar-2014 01:57:43 Europe/Berlin] PHP Notice:  Undefined variable: ENV in C:\xampp\htdocs\Raptor\actions\exportcsv.php on line 177
[19-Mar-2014 01:57:43 Europe/Berlin] C:/xampp/htdocs/Raptor/22.png
[19-Mar-2014 01:57:47 Europe/Berlin] PHP Notice:  getimagesize(): Read error! in C:\xampp\htdocs\Raptor\actions\exportcsv.php on line 225
[19-Mar-2014 01:57:47 Europe/Berlin] PHP Notice:  getimagesize(): Read error! in C:\xampp\htdocs\Raptor\actions\exportcsv.php on line 226
[19-Mar-2014 01:57:47 Europe/Berlin] PHP Warning:  imagecreatetruecolor(): Invalid image dimensions in C:\xampp\htdocs\Raptor\actions\exportcsv.php on line 230
[19-Mar-2014 01:57:47 Europe/Berlin] PHP Warning:  imagecreatefrompng(): '18.png' is not a valid PNG file in C:\xampp\htdocs\Raptor\actions\exportcsv.php on line 233
[19-Mar-2014 01:57:47 Europe/Berlin] PHP Warning:  imagecreatefrompng(): '18.png' is not a valid PNG file in C:\xampp\htdocs\Raptor\actions\exportcsv.php on line 234

【问题讨论】:

  • 您能否在顶部error_reporting(E_ALL); 并检查您的错误日志(或者如果您的服务器未设置为视觉记录错误,则可能是您页面的来源)?还要确保 highcharts 库中没有某种调试模式会阻止它记录错误。听起来您的服务器可能缺少依赖项,而 highcharts hcexport 命令正在返回 false
  • 感谢您的帮助 teh1。我已经在上面的部分上传了日志。我希望这能让您更好地了解正在发生的事情......
  • 您是否尝试过比较 chmod 的方向并检查客户端服务器上是否允许 fwrite?
  • 你好塞巴斯蒂安! Chmod 适用于 Linux,对吗?我在 Windows 7 上使用 Apache。如果您询问 Apache 是否具有正确的权限,那么是的,它肯定会 - 我将自己添加为用户,并且可以看到 PNG 文件正在按照请求的驱动器写入(和删除)上面的脚本...只是那些文件是空的(0kb)...

标签: javascript php highcharts png fwrite


【解决方案1】:

根据您发布的日志,这是我可以看到的直接问题。修复它们,如果仍然不起作用,请发布日志,我将添加到我的答案中:

ENV 未定义。 ENV 似乎是您的 xampp 文件夹的路径,但这里未定义,这意味着您可能没有指向正确的文件。再说一次,也许你是因为它正在创建一个空文件。

您并未发布所有代码。请发布日志中提到的所有代码,我将修改我的答案:

177、225、226、230、233、234

最好只发布第 177 行的整个函数或至少一些有意义的上下文,226 和 230-234 也是如此。

很明显,图像实际上并没有被创建,所以false,或者 PHP 处理它的任何内容都没有被写入文件。做到以上几点,我才能更好地回答。

【讨论】:

  • 您好,我已按要求发布了整个代码。我猜问题出在以下行:fwrite($fp, self::hcexport('filename=' . $v . "&amp;type=image/png&amp;width=800&amp;svg=" . $post_content[$k])); 出于某种原因,导出服务器似乎没有创建图像。
【解决方案2】:

确保向服务器请求正确的文件夹。还要确保包含图像的文件夹可以被服务器读取和写入。

这不是浏览器问题,因为您在 php.ini 中运行后端代码。您是否在两台计算机上运行相同的 php 版本?尝试检查它们是否以相同的方式配置,可能是未加载的 php/apache 模块。

【讨论】:

  • 你好梅达。应该为此加载哪些 PHP/Apache 模块?我很确定这不是权限问题,因为我可以在运行脚本时看到文件夹中正在创建/删除的文件。
  • 嗨,Noobster,是的,你是对的。我只是说以防万一你在一台机器上加载了一些模块而在另一台机器上忘记了。
猜你喜欢
  • 2015-11-19
  • 2018-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-04
相关资源
最近更新 更多