Проблемы со скриптом оболочки 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: несколько (не связанных) советов:

  1. вам не нужно завершать последний блок PHP с помощью ?>. На самом деле, часто лучше не к.
  2. при выполнении в командной строке PHP определяет глобальную константу STDIN to fopen("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 вместо этого Исправлена проблема для меня.