#1
|
|||
|
|||
Люди, подскажите почему пхп так себя ведет.
Пытаюсь сделать так: (это из примера работы пхп и 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 из пхп, посоветуйте, как сделать? |
#2
|
|||
|
|||
Аргументы popen насколько я знаю только "r" или "w"
А по поводу safe mode - как настроен php_safe_mode_exec_dir ? |
#3
|
|||
|
|||
</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 насколько я знаю только "r" или "w"
А по поводу safe mode - как настроен php_safe_mode_exec_dir ?[/QUOTE]<span id='postcolor'> Это уже интересно, а как же WM-новцы такое написали: (Привожу полностью функцию) ///////////////////////////////////////////////////////////////// // _GetSign - формирование строки подписи. // Для внутреннего пользования функциями данного модуля // // Параметры : // $inStr - Строка для подписи // Возвращает : // Строку - подпись // //! Для работы функции в той же директории, что и запушенный скрипт (не путайте //! с местом расположения данного файла-модуля), должны существовать файлы //! WMSigner и WMSigner.ini function _GetSign($inStr) { $fp = popen("./WMSigner", "r+" $PlanStr = "$inStr\004\r\n"; fwrite($fp,$PlanStr); $s = fgets($fp, 133); pclose($fp); return $s; } ///////////////////////////////////////////////////////////////// Если "r" пишу, то ($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 = . И что интересно, клиент говорит, что у другого хостера все ок. |
#4
|
|||
|
|||
По поводу popen - это вопрос еще тот
Вот что пишет 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 А safe_mode_exec_dir должен указывать на директорию откуда можно запускать программы. Насколько я помню (когда копал исходники) там если пути к программе нет, то тупо подставляется путь safe_mode_exec_dir |
#5
|
|||
|
|||
На сколько мне известно, то popen() закрыта если safe_mode включена, возможен запуск только из диры safe_mode_exec_dir и кроме того в последнем нельзя использовать "." и ".." (как и в popen).
__________________
GARM Technologies - №1 в Латвии :cool:
Выделенные сервера, VPS и рамещение сервера в Латвии. Любой тип хостинга, который Вы только можете себе представить. |
#6
|
|||
|
|||
Первая проблема вродебы решена.
Через з.., но работает. Вот с форума WM: http://forum.webmoney.ru/asp/n_message.asp?idcl=21&MessageID=22077 --------------------------------------------- Не все OS поддерживают двунапраправленный pipe. Можете использовать временный файл и однонаправленный pipe подобным образом: тело фунции можете заменить на: ================================ $tmp=tempnam("/tmp","wm" $fp = popen("./WMSigner >".$tmp, "w" $PlanStr = "$inStr\004\r\n"; fwrite($fp,$PlanStr); pclose($fp); $fp=fopen($tmp,"r" $s = fgets($fp, 133); fclose($fp); unlink($tmp); return $s; =============================== К сожалению это тоже не универсальный метод, поскольку на некоторых хостингах нельзя создать файл в папке /tmp. В этом случае создайте подобную папку в доступном вам месте файловой системы, и следите за количеством файлов в ней. ------------------------------------------------- Режим safe_mode пришлось выключить. Кстати, а что хорошего давал включеный режим safe_mode? Чем может грозить его выключение? (это второстепенный вопрос, но тоже важный для меня, а главный вопрос снизу Появилась вторая: curl не хочет "идти" на https, а на http ходит нормально. Делается все так: ========================================== $ch = curl_init("https://w3s.webmoney.ru".$addr); curl_setopt($ch, CURLOPT_HEADER, 0); // CURLOPT_RETURNTRANSFER часто работает некорректно $fp = tmpfile(); curl_setopt ($ch, CURLOPT_FILE, $fp); curl_exec($ch); curl_close($ch); fseek($fp,0,SEEK_SET); $result = fgets($fp,1024); fclose($fp); return $result; ====================================== Пхп скомпилин с curl, последняя стабильная версия 7.10.1 Что нужно , чтобы курл на https ходил? Выручайте!!! Хелп! |
#7
|
|||
|
|||
PHP с OpenSSL?
__________________
GARM Technologies - №1 в Латвии :cool:
Выделенные сервера, VPS и рамещение сервера в Латвии. Любой тип хостинга, который Вы только можете себе представить. |
#8
|
|||
|
|||
</span><table border="0" align="center" width="95%" cellpadding="3" cellspacing="1"><tr><td>Цитата (TiM @ 16 Ноя. 2002, 00:09)</td></tr><tr><td id="QUOTE">PHP с OpenSSL? [/QUOTE]<span id='postcolor'>
Сначала пхп был без опенссл, а потом я скомпилил с ней, и все равно ничего ж( |
#9
|
|||
|
|||
Помнится там для походов на https требовалось больше телодвижений чем просто добавление буковки s после http . Что конкретно - не спрашивайте. Попробуйте покопаться на php.net, там это было.
__________________
GARM Technologies - №1 в Латвии :cool:
Выделенные сервера, VPS и рамещение сервера в Латвии. Любой тип хостинга, который Вы только можете себе представить. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
VPS и функция include | aseo | Технические аспекты и вопросы безопасности | 5 | 14.02.2008 19:22 |
Перловое Set-Cookie: не работает в Firefox ? | chek.imde | Технологии программирования для web | 4 | 04.10.2007 15:59 |
Изменение личных данных не работает | Sergio | Замечания и предложения | 14 | 05.01.2004 17:04 |
Как curl работает? | avik | Технические аспекты и вопросы безопасности | 7 | 16.11.2002 20:34 |