首先我要展示 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::100 向 2001::200 机器发送一个 tcp ipv6 数据包。
[root@udit-pc]# 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 脚本时...
[root@udit-pc]# php test.php
Freeing module tcp
hellohi 被打印出来,数据包到达 2001::200。
但是当我尝试通过浏览器运行 php 脚本时出现问题...
http:://localhost/test.php
hellohi 被打印出来但是数据包没有到达其他机器。
sh: sendip: command not found
同样,在这两种情况下,虽然使用详细选项但在直接使用命令详细选项时数据包内容不会在终端打印。
我尝试了很多东西,虽然我不认为它们会有帮助,比如......
我将/usr/local/lib 和 usr/local/bin 添加到 PATH 变量但没有任何好处。
chmod +s/usr/local/bin/sendip .Sticky 位设置但同样没有任何好处。
尽管我已经更改了 PATH 变量,但将/usr/local/bin/sendip 本身粘贴到/var/www/html 文件夹中,但正如我所说,我只是在使用 hit n trial 没有任何线索......
有一些输出快照可能会进一步帮助....
[root@cc 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
[root@cc html]# locate sendip
.....
/usr/local/bin/sendip
/usr/local/lib/sendip
.....
[root@cc bin]# chmod +s sendip
[root@cc bin]# ls -l sendip
-rwsrwsrwx 1 apache apache 41071 Sep 26 19:41 sendip
[root@cc bin]# cd /usr/local/lib/
[root@cc lib]# ls -ld sendip
drwxrwxrwx 2 root root 4096 Sep 28 22:48 sendip
[root@cc lib]# chmod +s sendip
[root@cc lib]# ls -ld sendip
drwsrwsrwx 2 root root 4096 Sep 28 22:48 sendip
当文件内容改变时......
<?php
echo exec("/usr/bin/sendip ........ 2 > &1");
?>
然后输出是:
[root@cc html]# php test.php
Freeing module tcp[root@cc html]#
在浏览器上.... 没有打印错误,但数据包仍未到达。
我被困在两者之间。请建议我还应该尝试什么?????/
最佳答案
sendip()
是否在 PHP 调用的 shell 路径中?您没有检查错误情况,所以您可能实际上没有执行 sendip,而只是收到“没有这样的程序或文件”类型的错误。
与其将 exec() 命令的输出重定向到 null,不如将其全部重定向到浏览器,这样您就可以看到发生了什么:
echo exec("sendiip yada yada yada 2>&1");
关于php - 浏览器无法打开php页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7600382/