2011-09-29 144 views
0

首先我顯示了PHP代碼....瀏覽器無法打開php頁面?

<?php 

echo ("hello"); 

echo exec("sendip -v -p ipv6 -6s 2001::100 -p tcp -ts 21 -td 21 2001::200 2> 
&1"); 

echo ("hi"); 

?> 

當我通過Linux命令行輸入的命令,它正在罰款。命令是在2001年發送TCP IPv6報文:: 200機從2001 :: 100。

[[email protected]]# sendip -v -p ipv6 -6s 2001::100 -p tcp -ts 21 
-td 21 2001::200 > /dev/null & 

/* (-v for verbose) */  

輸出上面的命令......

Added 34 options 
Initializing module ipv6 
Initializing module tcp 
Finalizing module tcp 
Finalizing module ipv6 
Final packet data: 
60 00 00 00 `... 
/* 

    here other packet 
    contents gets printed 

    */ 

7D 62 00 00 }b.. 
61 62 63 64 abcd 
Sent 64 bytes to 2001::200 
Freeing module ipv6 
Freeing module tcp 

當我通過命令行執行PHP腳本...

[[email protected]]# php test.php 
Freeing module tcp 

hellohi獲取打印和數據包到達2001 :: 200。

但是當我嘗試通過瀏覽器來運行PHP腳本出現問題...

http:://localhost/test.php 

hellohi被打印,但數據包沒有在其他機器到達。

sh: sendip: command not found 

此外,在這兩種情況下,數據包的內容不會在終端印刷使用雖然詳細選項而是直接使用命令時詳細選項工作正常。

我有很多事情嘗試,雖然我不認爲他們會幫助像......

  1. 我加在/ usr/local/lib目錄和USR/local/bin目錄到PATH變量,但沒有效益。

  2. chmod + s/usr/local/bin/sendip.Sticky位已設置,但再次沒有好處。

  3. 將/ usr/local/bin/sendip自身粘貼到/ var/www/html文件夾中雖然我改變了PATH變量,但是正如我所說的,我只是使用了命中n試驗沒有線索.....

有一些輸出的快照可以進一步幫助....

[[email protected] html]# echo $PATH 
/usr/lib/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin: 
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin: 
/usr/X11R6/bin:/root/bin:/usr/local/lib 

[[email protected] html]# locate sendip 
..... 
/usr/local/bin/sendip 
/usr/local/lib/sendip 
..... 

[[email protected] bin]# chmod +s sendip 
[[email protected] bin]# ls -l sendip 
-rwsrwsrwx 1 apache apache 41071 Sep 26 19:41 sendip 

[[email protected] bin]# cd /usr/local/lib/ 
[[email protected] lib]# ls -ld sendip 
drwxrwxrwx 2 root root 4096 Sep 28 22:48 sendip 
[[email protected] lib]# chmod +s sendip 
[[email protected] lib]# ls -ld sendip 
drwsrwsrwx 2 root root 4096 Sep 28 22:48 sendip 

當文件內容發生了變化.......

<?php 
echo exec("/usr/bin/sendip ........ 2 > &1"); 
?> 

然後oputput是:

[[email protected] html]# php test.php 
Freeing module tcp[[email protected] html]# 

在瀏覽器.... 沒有錯誤被打印,但仍包沒有到達。

我被困在between.Please建議我什麼,否則我就應該努力??????/

+0

exec(...)返回什麼?你可以嘗試system()來獲得更多的輸出。 –

+0

正如您所懷疑的,最有可能是權限問題。 – Brad

+0

@Brad我也試過這個命令....'chown apache:apache test.php'但是沒有好處again.If燙髮問題,然後請建議我,我應該怎麼做? –

回答

1

sendip()在被PHP調用的shell的路徑中嗎?你不檢查錯誤條件,所以可能你實際上並沒有執行sendip,只是得到一個「沒有這樣的程序或文件」類型的錯誤。

不是重定向的EXEC()'d命令的輸出爲空的,這一切都重定向到瀏覽器,所以你可以看看會發生什麼:

echo exec("sendiip yada yada yada 2>&1"); 
+0

sendip的輸出應該出現在其他機器上,而不是瀏覽器...如果我不會重定向命令輸出,即使它會工作.'php test.php'能夠在其他m/c上發送數據包,當我不使用任何重定向操作符 –

+0

是的,但是如果sendip永遠不會被調用(例如:它不在PHP shell的路徑中),那麼exec命令將輸出通常的「no such file」錯誤,該錯誤不會被捕獲到PHP中。這僅用於調試目的。請記住,在命令行上直接運行命令與在Web服務器下運行時相同的腳本是完全不同的環境。 –

+0

設置PHP PATH與設置shell PATH不同。我使用了'PATH = $ PATH:/ usr/lib'。我是否需要爲PHP PATH做其他事情? sendip位於'/ usr/lib/sendip'中。而你告訴我的這一個,我會盡力...建議。 –

0

嘗試使用完整的路徑:

exec("/usr/lib/sendip -v -p ipv6 -6s 2001::100 -p tcp -ts 21 -td 21 2001::200 > /dev/null &"); 
0

服務器是最有可能沒有運行與用戶具有相同的權限,您正在測試。

服務器很可能會丟棄任何PATH變量。確保您在exec調用中指定了sendip的完整路徑。

0

雖然我不能說其完全解決了這個問題就解決了但根據我的需要它的工作。

我所做的是我重新安裝了sendip,然後設置了它的粘性位,然後我設置Path變量爲上面提到的問題。

實際上該工具默認安裝在/usr/local/lib/sendip文件夾中的庫和/usr/local/bin文件夾中的sendip。

雖然設置PATH變量後,我仍然需要使用完整路徑在PHP腳本

/usr/local/bin/sendip -v .....

(我的一個朋友建議我這個..)

我覺得是PHP路徑與Shell PATH不同,我需要將sendip粘貼到/usr/bin,然後在設置它的粘性位之前,我需要運行updatedb,如果我不想提及PHP腳本中的完整路徑。現在這個命令在PHP腳本中可以正常工作。
sendip -v .........

雖然可能是我錯了,但這一切都適合我。