#php #apache #zend-framework #include-path
#php #apache #zend-framework #включить-путь
Вопрос:
У меня проблема в том, что на сервере функция include () не хочет работать, и я понятия не имею, почему?
У меня есть:
if (file_exists('/home/p002/htdocs/Project2/library/IntelliSMS/SendScripts/IntelliSMS.php')) {
echo "1 works";
} else {
echo "The file 1 does not exist";
}
if(include "$_SERVER[DOCUMENT_ROOT]/Project2/library/IntelliSMS/SendScripts/IntelliSMS.php" == 'OK')
{
echo 'INCLUDE 1 works';
}
else
{
echo 'Step 1 fail';
}
if(include '/home/p002/htdocs/Project2/library/IntelliSMS/SendScripts/IntelliSMS.php' == 'OK')
{
echo 'INCLUDE 2 works';
}
else
{
echo 'Step 2 fail';
}
Он возвращает: 1 works Step 1 fail Step 2 fail
Я понятия не имею, как заставить это работать. Справка
Я использую zend framework, и этот файл находится в библиотеке (параллельно zend -libraries — directory, но он тоже не хочет работать без включаемого каталога :/
Для меня это действительно странно, поскольку, когда я добавляю:
include ("/home/p002/htdocs/Project2/library/IntelliSMS/SendScripts/IntelliSMS.php");
И это правильный путь, у меня есть только пустая страница! Но когда я добавляю:
include ("/homedddd/p002/htdocs/Project2/library/IntelliSMS/SendScripts/IntelliSMS.php");
И это неправильный путь, страница не пуста, похоже, что все работает нормально. Это означает, что что-то не так с этой библиотекой IntelliSMS, она не работает с моим сервером, но я не знаю почему? Возможно, сервер блокирует отправку sms или что-то в этомроде? У вас есть какие-нибудь идеи? Эта библиотека из http://intellisms.co.uk/sms-gateway/php-sdk Может быть, проблема в том, что ему нужен модуль расширения OpenSSL? Что я должен сделать, чтобы это начало работать?
Комментарии:
1. просто используйте
include('/home/…');
2. Я обновил свой ответ после того, как вы безуспешно попробовали мое первое предложение. Возможно, это проблема с разрешениями. Есть ли у вас (сервера) права на чтение файла, который вы хотите включить?
3. Что возвращает скрипт
IntelliSMS.php
? То есть, завершается ли он сreturn
инструкцией (которая должна использоваться для вашего использования) или этоecho
что-то (чего будет недостаточно для вашего использования)?
Ответ №1:
В первом блоке кода вы обнаружили, что /home/p002/htdocs/Project2/library/IntelliSMS/SendScripts/IntelliSMS.php
существует. Когда вы пытаетесь включить этот файл, вы никогда не используете точно такую же строку. Если вы это сделаете, это должно сработать.
Редактировать: Вы пробовали это, и это не удалось. В таком случае это выглядит как проблема с разрешением. Если у вас нет прав на чтение для этого файла, первый тест сработает, но включение файла завершится неудачей.
Комментарии:
1. хммм, я изменил права на чтение и выполнение, и это все еще не работает :/ Я добавлю все права и проверю…
Ответ №2:
Вы изменили свои косые черты по кругу. Это может быть проблемой.
Ответ №3:
Вы никогда не должны использовать обратную косую черту в именах путей. Используйте косую черту /
, которая работает как на серверах Windows, так и на Un *x.
Кроме того, имя базового каталога вряд ли будет идентичным на обоих серверах. Сделайте его перемещаемым и замените /home/p003/htdocs
на DOCUMENT_ROOT
вот так:
include "$_SERVER[DOCUMENT_ROOT]/Project2/library/IntelliSMS/SendScripts/IntelliSMS.php";
Обратите внимание на двойные кавычки.
Я бы также рекомендовал избегать имен файлов со смешанным регистром, если это возможно.
Ответ №4:
Вот что вы делаете неправильно, вы на самом деле пытались включить FALSE в каждой отдельной попытке. Делать что-то вроде этого
include '/path/to/file.php' == "OK";
равно этому
include FALSE;
Вероятно, это то, что вы хотели сделать
if((include '/path/to/file.php') == "OK") { echo("works"); }
Другие пользователи SO упустили из виду этот факт, потому что ваш путь такой длинный, сравнение скрывается в вашем блоке кода.
Комментарии:
1. У меня есть: if (file_exists(‘/home/p002/htdocs/Project2/library/IntelliSMS/SendScripts/IntelliSMS.php ‘)) { echo «1 работает<br/>»; } else { echo «Файл 1 не существует<br/>»; } if(включить ($_SERVER[DOCUMENT_ROOT].»/Project2/library/IntelliSMS/SendScripts/IntelliSMS.php «) == ‘OK’) { echo ‘ВКЛЮЧЕНИЕ 1 работает<br/>’; } else { echo ‘Сбой шага 1<br/>’; } if(включить («/home/p002/htdocs/Project2/library/IntelliSMS/SendScripts/IntelliSMS.php «) == ‘OK’) { echo ‘ВКЛЮЧИТЬ 2 работает<br/>’; } else { echo ‘Сбой шага 2<br/>’; } И все то же самое