从 PHP 调用的 perl 脚本生成字节大小为零的文件


perl script called from PHP generates file with zero bytes size

我正在调用外部Perl脚本将DXF文件转换为SVG,但是当从PHP调用脚本时,输出SVG文件始终为0字节。从终端执行相同的命令时,输出 SVG 文件正常。

我正在通过 PHP system() 执行命令,也尝试了 exec() 和 popen(),但我总是有相同的结果。

dxf2svg.pl perl 脚本源代码:http://pastebin.com/fE2BcUqE

我正在执行的命令:

perl /path/dxf2svg.pl "/path_to_dxf/file.dxf" ">/output_path/file.dxf"

Outup 路径对 PHP 用户来说是可写的,所以这不是问题所在。

在聊天中调试后,发现该行

open (WRITECSS, ">output.css")or die("error in Writing CSSFile");

是罪魁祸首。由于从命令行运行脚本创建了一个具有错误写入权限的文件,因此脚本在此语句中死亡。由于错误没有返回给 PHP,因此错误是无声的。

解决方案是chmod输出 CSS 文件。

调试是通过将STDERR从 perl 重定向到文件,并将错误报告变量$!添加到 die 语句来完成的:

open STDERR, ">>", "somefile" or die $!;
open (WRITECSS, ">output.css")or die("error in Writing CSSFile: $!");