Проблемы со скриптом оболочки PHP: "не удалось открыть входной файл"
Ок, я попытка чтобы создать регистратор электронной почты, который использует скрипт оболочки PHP. Я настроил CPanel для передачи сообщений электронной почты в мой скрипт. Я уверен, что все настроено правильно. Однако у меня возникли проблемы со скриптом, Ну любой скрипт, если на то пошло, при запуске его из оболочки.
вот пример.
#!/usr/local/bin/php –q
<?php
/* Read the message from STDIN */
$fd = fopen("php://stdin", "r");
$email = ""; // This will be the variable holding the data.
while (!feof($fd)) {
$email .= fread($fd, 1024);
}
fclose($fd);
/* Saves the data into a file */
$fdw = fopen("mail.txt", "w+");
fwrite($fdw, $email);
fclose($fdw);
/* Script End */
?>
очень просто, верно? Чтение из STDIN и запись в файл...Я подумал, что что-то не так, по какой-то причине не могу прочитать STDIN. Хостинг-провайдер позволяет это, allow_url_open и allow_url_include включены.
при выполнении скрипта через SSH я получаю следующую ошибку: Не удалось открыть входной файл: âq
поэтому я снова подумал, что это сценарий, рассказывающий мне, что не может читать из STDIN
поэтому я попробовал просто простой скрипт.
#!/usr/local/bin/php –q
<?php
echo 'Hello World';
?>
то же самое: Не удалось открыть входной файл: âq
таким образом, кажется, что программа PHP говорит мне, что она не может открыть сценарий? Сценарий находится в $HOME/mail / forward (CHMOD 755), а сам скрипт-CHMOD 755, а также файл mail.txt-это CHMOD 755 Я действительно в тупике.
7 ответов
вы пробовали:
#!/usr/local/bin/php
т. е. без -q
часть? Вот что означает сообщение об ошибке "не удалось открыть входной файл: -q". Первый аргумент php
если это не похоже на опцию, это имя файла PHP для выполнения, и -q
только CGI.
EDIT: несколько (не связанных) советов:
- вам не нужно завершать последний блок PHP с помощью
?>
. На самом деле, часто лучше не к. - при выполнении в командной строке PHP определяет глобальную константу
STDIN
tofopen("php://stdin", "r")
. Вы можете использовать это вместо открытия"php://stdin"
второй раз:$fd = STDIN;
Я просто испытал эту проблему, и это было потому, что я пытался запустить сценарий из неправильного каталога.. дох! Это случается с лучшими из нас.
при использовании аргумента php CLI-q не существует.
У меня была такая же проблема, когда я писал сценарий в Windows (eclipse), и я попытался запустить их на Linux. Каждая строка в файле из Windows заканчивается на \r\n. Мне пришлось удалить \r в первой строке, содержащей путь парсера:
когда \r был удален из первой строки (mcedit shown \r as ^M) скрипт работал правильно.
Проблема Кодировки Символов Windows
У меня была та же проблема. Я редактировал файлы в PDT Eclipse на Windows и WinSCPing их. Я просто скопировал и вставил содержимое в окно nano, сохранил, и теперь они работали. Определенно некоторые проблемы кодирования символов Windows, а не вопрос Shebangs или флагов интерпретатора.
Я приземлился на этой странице при поиске решения для "не удалось открыть входной файл" ошибка. Вот мои 2 цента за эту ошибку.
я столкнулся с этой же ошибкой, потому что я использовал параметры в моем пути к файлу php, как это:
/usr/bin/php -q /home/**/public_html/cron/job.php?id=1234
но я узнал, что это не правильный способ сделать это. Правильный способ отправки параметров выглядит так:
/usr/bin/php -q /home/**/public_html/cron/job.php id=1234
просто заменить "?"
пробел " "
.
из-за проблемы кодирования windows для меня
Я испытал эту ошибку" не удалось открыть входной файл". Затем я получил файл, используя wget
из другой системы linux, и ошибка не произошла.
ошибка ws возникает только для меня, когда файл передается через windows.
для меня проблема была в том, что я должен был использовать /usr/bin/php-cgi
команда вместо просто /usr/bin/php
php-cgi-это команда, выполняемая при доступе через веб-браузер.
php-это команда командной строки CLI.
не уверен, почему php cli не работает, но работает с php-cgi вместо этого Исправлена проблема для меня.