web-dev-qa-db-ja.com

PHPシェルスクリプトの問題:「入力ファイルを開けませんでした」

OK、私はtrying 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です。これには本当に困っています。

16
Mike L.

やってみました:

_#!/usr/local/bin/php
_

つまり_-q_部分なし?これが、「入力ファイルを開けませんでした:-q」というエラーメッセージの意味です。オプションのように見えない場合のphpの最初の引数は、PHP実行するファイルの名前であり、_-q_はCGIのみです。

編集:いくつかの(関連しない)ヒント:

  1. PHPの最後のブロックを_?>_で終了する必要はありません。実際には、そうしない方がよい場合がよくあります。
  2. コマンドラインで実行すると、PHPはグローバル定数STDINfopen("php://stdin", "r")に定義します。_"php://stdin"_を開く代わりに、時間:_$fd = STDIN;_
6
Daniel Trebbien

この問題が発生しました。間違ったディレクトリからスクリプトを実行しようとしたためです。それは私たちの最高のものに起こります。

9
JustinP

Php CLI引数を使用する場合、引数-qは存在しません。

Windows(Eclipse)でスクリプトを作成したときも同じ問題があり、Linuxで実行してみました。 Windowsからのファイルのすべての行は、\ r\nで終了します。パーサーパスを含む最初の行の\ rを削除する必要がありました。

\ rが最初の行から削除されたとき(mceditは\ rが^ Mとして表示されます)、スクリプトは正しく実行されました。

4
programer

「入力ファイルを開けませんでした」エラーの解決策を検索したところ、このページが表示されました。これがこのエラーの私の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文字エンコードの問題

私は同じ問題を抱えていました。 Windows上のPDT Eclipseでファイルを編集し、WinSCPで上書きしていました。内容をコピーしてnanoウィンドウに貼り付けて保存したところ、動作しました。間違いなくWindowsの文字エンコーディングの問題であり、Shebangsやインタープリターフラグの問題ではありません。

2
Joseph Lust

私にとっての問題は、/usr/bin/php-cgiコマンドだけではなく/usr/bin/php

php-cgiは、Webブラウザーからアクセスしたときに実行されるコマンドです。

phpはCLIコマンドラインコマンドです。

Php cliが機能しない理由はわかりませんが、php-cgiで実行すると問題が解決しました。

1
jsherk

Windowsのエンコードの問題により

この「入力ファイルを開けませんでした」というエラーが発生しました。次に、wgetを使用して別のLinuxシステムからファイルを取得しましたが、エラーは発生しませんでした。

エラーは、ファイルがWindowsを通過したときにのみ発生しました。

0
steampowered