Форум о хостинге
15 ґХЪРСам 2018, 02:05:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости: SMF форум только что установлен!
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]
  Печать  
Автор Тема: Php, функция popen не работает.  (Прочитано 1493 раз)
avik
Новичок
*
Сообщений: 34


Просмотр профиля
« : 02 ЅЮпСам 2002, 06:06:46 »

Люди, подскажите почему пхп так себя ведет.

Пытаюсь сделать так: (это из примера работы пхп и WMSigner от WebMoney)

$fp = popen("./WMSigner", "r+")

Выдает:
Invalid argument in /usr/local/psa/home/vhosts/........

Что только не пробовал вызывать, из разных мест,
результат такой. Ему ненравится *open_base_directory ?
Так если open_base_directory, то и ошибка об этом говорит. А тут совсем не про него.
Убираю плюс, ошибка пропадает, но и не работает дальше.

Выключаю safe mode, все равно не работает.
А open_base_directory, убрать или изменить не могу.
Панель управления Плеск не даст, или както можно?

пхп настроен так: safe mode on, open_base_directory /tralala...

Мне кажется это изза open_base_directory, как можно это обойти, чтобы запустить этот WMSigner?
Перловый вариант работает отлично с WMSigner, а пхп нет.

Может кто сталкивался с запуском WMSigner из пхп, посоветуйте, как сделать?
Записан
AndreyS
Новичок
*
Сообщений: 140


Просмотр профиля
« Ответ #1 : 02 ЅЮпСам 2002, 10:34:53 »

Аргументы popen насколько я знаю только "r" или "w"
А по поводу safe mode - как настроен php_safe_mode_exec_dir ?
Записан
avik
Новичок
*
Сообщений: 34


Просмотр профиля
« Ответ #2 : 02 ЅЮпСам 2002, 14:51:57 »

</span><table border="0" align="center" width="95%" cellpadding="3" cellspacing="1"><tr><td>Цитата (AndreyS @ 02 Ноя. 2002, 10:34)</td></tr><tr><td id="QUOTE">Аргументы popen насколько я знаю только &quot;r&quot; или &quot;w&quot;
А по поводу safe mode - как настроен php_safe_mode_exec_dir ?[/QUOTE]<span id='postcolor'>
Это уже интересно, а как же WM-новцы такое написали:
(Привожу полностью функцию)

/////////////////////////////////////////////////////////////////
// _GetSign - формирование строки подписи.
// * * * * * *Для внутреннего пользования функциями данного модуля
//
// Параметры :
// * $inStr *- Строка для подписи
// Возвращает :
// * Строку - подпись
//
//! Для работы функции в той же директории, что и запушенный скрипт (не путайте
//! с местом расположения данного файла-модуля), должны существовать файлы
//! WMSigner и WMSigner.ini

function _GetSign($inStr)
{
*$fp = popen(&quot;./WMSigner&quot;, &quot;r+&quot;);

*$PlanStr = &quot;$inStr\004\r\n&quot;;
*fwrite($fp,$PlanStr);
*$s = fgets($fp, 133);
*pclose($fp);

*return $s;
}
/////////////////////////////////////////////////////////////////

Если &quot;r&quot; пишу, то * ($s = fgets($fp, 133)Подмигивающий выдает ошибку и ничего нужного не возвращает.

2
А по поводу safe_mode_exec_dir:
Local Value * *= no value
Master Value *= no value

Пробовал ставить так:
Local Value * *= /usr/local/bin
Master Value *= no value

И вродебы пробовал ставить так:
(по разному пробовал, уже забыл как)
Local Value * *= .
Master Value *= .

И что интересно, клиент говорит, что у другого хостера все ок.
Записан
AndreyS
Новичок
*
Сообщений: 140


Просмотр профиля
« Ответ #3 : 02 ЅЮпСам 2002, 15:58:15 »

По поводу popen - это вопрос еще тот webhostingtalk.ru/iB_html/non-cgi/emoticons/smile.gif
Вот что пишет man:
</span><table border="0" align="center" width="95%" cellpadding="3" cellspacing="1"><tr><td>Цитата </td></tr><tr><td id="QUOTE">
Historically, popen() was implemented with a unidirectional pipe; hence many implementations of popen() only allow the type argument to specify reading or writing, not both.[/QUOTE]<span id='postcolor'>

Соответственно работать будет не для всех реализаций и платформ. Отсюда и предупреждение разработчиков php

</span><table border="0" align="center" width="95%" cellpadding="3" cellspacing="1"><tr><td>Цитата </td></tr><tr><td id="QUOTE">Note: If you're looking for bi-directional support (two-way), use proc_open(). [/QUOTE]<span id='postcolor'>

Но proc_open это для php 4.3.0 webhostingtalk.ru/iB_html/non-cgi/emoticons/smile.gif

А safe_mode_exec_dir должен указывать на директорию откуда можно запускать программы.
Насколько я помню (когда копал исходники) там если пути к программе нет, то тупо подставляется путь safe_mode_exec_dir
Записан
TiM
Новичок
*
Сообщений: 502


Просмотр профиля
« Ответ #4 : 02 ЅЮпСам 2002, 22:34:38 »

На сколько мне известно, то popen() закрыта если safe_mode включена, возможен запуск только из диры safe_mode_exec_dir и кроме того в последнем нельзя использовать &quot;.&quot; и &quot;..&quot; (как и в popen). webhostingtalk.ru/iB_html/non-cgi/emoticons/wink.gif
Записан
Страниц: [1]
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS!