2012-06-01 45 views
1

我調用外部Perl腳本將DXF文件轉換爲SVG,但是當從PHP調用腳本時,輸出SVG文件始終爲0字節。當從終端執行相同的命令時,輸出SVG文件是OK的。我正在通過PHP系統()執行命令,並嘗試exec()和popen(),但我總是有相同的結果。從PHP調用的perl腳本生成零字節大小的文件

dxf2svg.pl perl腳本代碼:http://pastebin.com/fE2BcUqE

命令,我執行:

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

Outup路徑是寫PHP的用戶,所以這不是問題。

+0

這是事實,問題是在PHP腳本:

調試是由Perl的重定向STDERR到一個文件,並添加錯誤報告變量$!die語句來完成的。你也可以展示它嗎? – Leri

+0

一個猜測是,你的包含'MODE'的怪異公開聲明會讓事情變得糟糕。即PHP將其轉變爲重定向,並在perl腳本完成後覆蓋該文件。但是,*應該*導致你的Perl腳本死掉,因爲它無法打開一個未定義的文件名。 – TLP

回答

2

chat調試後,它發現該行

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

是罪魁禍首。由於從命令行運行腳本創建了具有錯誤寫入權限的文件,因此腳本在此語句中死亡。由於錯誤未返回給PHP,因此錯誤是無聲的。

解決方案是將chmod輸出爲CSS文件。

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

原始的perl腳本有這樣一行:open(WRITECSS,> output.svg)。我只是改變了腳本,以便我可以提供輸出文件。我會嘗試建議的更改並確認結果!更新:與以前相同的結果!輸出文件仍然是零字節:(從終端嘗試命令,它的效果和以前一樣!從PHP相同的情況! –

+0

@PrimozRome你可以檢查PHP錯誤日誌(apache?),看看你是否發現這些錯誤但你應該知道,不使用硬編碼的「open」模式是一個非常糟糕的主意,也是一個安全風險,有人可能會給出參數'「| rm -rf /」'然後你就搞砸了 – TLP

+0

@ PrimozRome您是否更改了參數和perl代碼? – TLP