Проблемы со сценарием оболочки PHP: «Не удалось открыть входной файл» - PullRequest
13 голосов
/ 31 декабря 2010

Хорошо, я пытаюсь создать регистратор электронной почты, который использует скрипт оболочки 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 ]

9 голосов
/ 04 декабря 2013

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

6 голосов
/ 31 декабря 2010

Вы пробовали:

#!/usr/local/bin/php

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

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

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

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

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

2 голосов
/ 30 сентября 2015

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

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

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

0 голосов
/ 27 января 2018

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

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

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

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

0 голосов
/ 02 февраля 2015

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

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

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

...