2017-01-12 46 views
0

我想在PHP內部運行一個簡單的perl腳本。我不斷收到,我無法弄清楚這些奇怪的貝殼錯誤爲什麼,下面是PHP代碼:運行php內部錯誤php

<?php 
system("perl -e use Socket;\$i='192.168.1.1';\$p=443;print \$i;print \$p"); 
?> 

錯誤我不斷收到運行它時:

syntax error at -e line 1, at EOF 
Execution of -e aborted due to compilation errors. 
sh: 1: =192.168.1.1: not found 
sh: 1: =443: not found 

我運行PHP腳本通過CLI這樣的:

php script.php 
+2

只需運行'perl的-e使用Socket; \ $ I = '192.168.1.1' ; \ p = 443;打印\ $ i;在您的命令行上打印\ $ p',您將看到問題所在。 – mob

+0

@mob,你的意思是'perl -e使用Socket; $ i ='192.168.1.1'; $ p = 443; print $ i; print $ p' – ikegami

+0

你是對的,我刪除了我的評論:) –

回答

2
"perl -e use Socket;\$i='192.168.1.1';\$p=443;print \$i;print \$p" 

產生串

perl -e use Socket;$i='192.168.1.1';$p=443;print $i;print $p 

這真是太錯了。殼牌命令等同於以下五個shell命令(假設ENV瓦爾ip未設置):

perl -e use Socket 
='192.168.1.1' 
=443 
print 
print 

要執行的Perl程序是

use Socket; $i='192.168.1.1'; $p=443; print $i; print $p; 

use Socket; $i="192.168.1.1"; $p=443; print $i; print $p; 

所以你要執行的shell命令是

perl -e'use Socket; $i="192.168.1.1"; $p=443; print $i; print $p;' 

perl -MSocket -e'$i="192.168.1.1"; $p=443; print $i; print $p;' 

,所以你要執行的命令PHP是

system("perl -MSocket -e'\$i=\"192.168.1.1\"; \$p=443; print \$i; print \$p;'")