it-roy-ru.com

Проблемы с 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 Я действительно озадачен этим.

11
Mike L.

Ты пытался:

#!/usr/local/bin/php

То есть без части -q? Вот что означает сообщение об ошибке «Не удалось открыть входной файл: -q». Первым аргументом php, если он не похож на параметр, является имя файла PHP, который нужно выполнить, а -q только для CGI.

Правка: Пара (не связанных) советов:

  1. Вам не нужно завершать последний блок PHP с помощью ?>. На самом деле, часто лучше этого не делать.
  2. При выполнении в командной строке PHP определяет глобальную константу от STDIN до fopen("php://stdin", "r"). Вы можете использовать это вместо того, чтобы открывать "php://stdin" во второй раз: $fd = STDIN;
6
Daniel Trebbien

Я только что столкнулся с этой проблемой, и это было потому, что я пытался запустить скрипт из неправильного каталога .. Дох! Это случается с лучшими из нас.

8
JustinP

Когда вы используете php CLI аргумент -q не существует.

У меня была такая же проблема, когда я писал сценарии в Windows (Eclipse) и пытался запустить их в Linux. Каждая строка в файле из Windows заканчивается на\r\n. Мне пришлось удалить\r в первой строке, которая содержала путь парсера:

Когда\r был удален из первой строки (mcedit показывал\r как ^ M), скрипт работал правильно.

4
programer

Я попал на эту страницу при поиске решения для «Не удалось открыть входной файл» error. Вот мои 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

Просто замените "?" пробелом " ".

2
Ram Shengale

Проблема кодировки символов Windows

У меня была такая же проблема. Я редактировал файлы в PDT Eclipse под Windows и перезаписывал их. Я просто скопировал и вставил содержимое в окно nano, сохранил, и теперь они работают. Определенно какая-то проблема кодировки символов Windows, а не вопрос Шебанга или флагов интерпретатора.

2
Joseph Lust

Из-за проблемы с кодировкой Windows для меня

Возникла ошибка «Не удалось открыть входной файл». Затем я получил файл с помощью wget из другой системы Linux, и ошибка не произошла. 

Ошибка возникает только для меня, когда файл проходит через Windows.

0
steampowered

Для меня проблема была в том, что мне пришлось использовать команду /usr/bin/php-cgi вместо просто /usr/bin/php

php-cgi - это команда, запускаемая при доступе через веб-браузер.

php - это командная строка командной строки.

Не уверен, почему php cli не работает, но запуск с php-cgi вместо этого решил проблему для меня.

0
jsherk