PHP-скрипт не может найти файл при вызове флэш-программой - PullRequest
1 голос
/ 18 ноября 2009

Я сейчас работаю над программой, которая вызывает скрипт mail.php, расположенный в / var / www / vhosts / company / httpdocs. mail.php пытается выполнить require_once dirname(__FILE__).'/../pear/Mail.php' для отправки smtp, а require_once не удается. Мой каталог PEAR находится в / var / www / vhosts / company / pear. Затем я попытался добавить / var / www / vhosts / company / pear в include_path, но require_once все еще не работает.

Я решил сделать шаг назад и заменить mail.php как простой скрипт, который выполняет file_exists(dirname(__FILE__).'/../pear/Mail.php') и печатает результат в лог-файл. Когда я запускаю скрипт независимо, он работает нормально и возвращает 1. Когда программа запускает его, ничего не возвращается. Распечатка dirname(__FILE__).'/../pear/Mail.php' возвращает то же самое, независимо от того, запускаю ли я скрипт самостоятельно или запускает ли его флэш-файл. Я также пробовал chmod 777 в файле PEAR Mail.php, но это ничего не дало.

Есть идеи о том, что происходит?

1 Ответ

0 голосов
/ 20 ноября 2009

Я бы поспорил на все, что связано с двумя вещами:

1) Flash / Actionscript обычно не обращается к локальным путям к файлам.

Другими словами, он, вероятно, даже не выполняет файл.

Как скомпилированный модуль на стороне клиента, ему необходим реальный доступный в сети URL. Часть проблемы здесь - сам дизайн. Попробуйте это с HTTP-запросом в ActionScript, и вы получите лучшие результаты. Если у вас нет доступа к файлу флэш-памяти ... хорошо, жесткие бобы там.

Теперь, если вы запускаете почтовую программу через actioncript? Я бы сказал, что это риск для безопасности. Вам лучше сделать так, чтобы код действия передавал подпрограмму приемнику AJAX, который проверяет учетные данные сеанса и , а затем отправляет почту.

2) Ограничения CWDUP на сервере.

В зависимости от определенных конфигураций сервера исключительные файлы обычно не имеют доступа к файловым путям вне своего корневого каталога. (то есть исполняемый файл не может вызвать .... \ другой каталог \ другой файл.) Некоторые серверы позволяют это, но многие этого не делают.

Возможно, вы захотите убедиться, что ваш каталог PEAR находится в переменной пути php.ini. Таким образом, вам вообще не нужно использовать CWDUP в имени каталога, он найдет его в каталоге include. (это обычно, как работают модули груши.)

Так что вместо того, чтобы использовать кучу точечных точек ... попробуйте поработать сверху вниз.

$mailpath=$_SERVER['DOCUMENT_ROOT'].'\include\mail.php';

В качестве последнего средства вы можете попробовать скопировать подпрограмму mail.php в тот же каталог и посмотреть, работает ли она. Если это по-прежнему не удается, то это ваш путь включения в PEAR. (поскольку mail.php, вероятно, вызывает функции PEAR.)

...