Браузер не может открыть страницу php? - PullRequest
0 голосов
/ 29 сентября 2011

Прежде всего я показываю код 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, она работает нормально. Команда отправляет пакет tcp ipv6 в 2001 году:: 200 машин с 2001 года :: 100.

[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

Кроме того, в обоих случаях содержимое пакета не печатается на терминале, хотя при использовании опции verbose, но при непосредственном использовании команды, опция verbose работает нормально.

Я пробовал много вещей, хотя я не думаю,они бы помогли как ......

  1. Я добавил / usr / local / lib и usr / local / bin к переменной PATH, но безрезультатно.

  2. chmod + s / usr / local / bin / sendip. Стильный бит установлен, но опять же не дает никаких преимуществ.

  3. вставьте / usr / local / bin / sendip в /Папка var / www / html, хотя я изменил переменную PATH, но, как я уже сказал, я просто использую пробную версию Hit N, не имея понятия ...

Существуют некоторые выходные снимки, которые могут помочь в дальнейшем ....

[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");
 ?>

Тогда oputput будет:

 [root@cc html]# php test.php
 Freeing module tcp[root@cc html]# 

В браузере .... Ошибка не печатается, но пакет все еще не прибыл.

Я застрял между ними. Пожалуйста, предложите мне, что ещелучше попробовать ?????? /

Ответы [ 4 ]

1 голос
/ 29 сентября 2011

находится sendip() в пути оболочки, вызываемой PHP? Вы не проверяете наличие ошибок, поэтому, возможно, вы на самом деле не выполняете sendip, а просто получаете ошибки типа «нет такой программы или файла».

Вместо перенаправления вывода команды exec () 'на ноль, перенаправьте все это в браузер, чтобы вы могли видеть, что происходит:

echo exec("sendiip yada yada yada 2>&1");
0 голосов
/ 03 октября 2011

Проблема решена, хотя я не могу сказать, что она полностью решена, но согласно моей необходимости, она работает.

Что я сделал, так это переустановил sendip, затем установил его липкий бит, а затем установил переменную Path, как указано выше в вопросе.

На самом деле инструмент по умолчанию устанавливает библиотеки в папку /usr/local/lib/sendip и sendip в папку /usr/local/bin.

Хотя после установки переменной PATH мне все еще нужно использовать полный путь в скрипте PHP

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

(один из моих друзей предложил мне это ..)

Я думаю, что PHP Path чем-то отличается от Shell PATH. Мне нужно вставить sendip в /usr/bin, а затем мне нужно запустить updatedb, прежде чем устанавливать его липкий бит, если я не хочу упоминать полный путь в PHP Script. Теперь эта команда будет отлично работать в PHP Script.
sendip -v .........

Хотя, может быть, я ошибаюсь, но у меня все отлично работает.

0 голосов
/ 29 сентября 2011

Сервер, скорее всего, не работает с теми же разрешениями, что и пользователь, с которым вы тестируете.

Сервер, скорее всего, отбрасывает любую переменную PATH.Убедитесь, что вы указали полный путь к sendip в вызове exec.

0 голосов
/ 29 сентября 2011

Попробуйте использовать полный путь:

exec("/usr/lib/sendip -v -p ipv6 -6s 2001::100 -p tcp -ts 21 -td 21 2001::200 > /dev/null &");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...