web-dev-qa-db-ja.com

シバン#を追加する方法! LinuxのPHPスクリプトで?

シバン#の追加に少し問題があります! RedHat Linux上の私のPHPスクリプトで。 Shebangを追加した小さなテストコードがあります(さまざまなバリエーションも試しました)が、スクリプトを実行しようとするたびに次のエラーメッセージが表示されます。

エラーメッセージ:

-bash: script.php: command not found

テストスクリプト:

#!/bin/env php    
<?php echo "test"; ?>

シバン#!バリエーション:

#!/usr/bin/php
#!/usr/bin/env php
24
user2799603

(ほとんどのシステムでは)#!/usr/bin/env phpである必要がありますが、エラーはそれとは関係ありません。

-bash: script.php: command not found

script.phpが見つからないことを示しています。

問題がシバン行の場合、エラーは次のようになります。

bash: script.php: /usr/env: bad interpreter: No such file or directory

おそらく、[script.php]と入力していて、ファイルが$PATHのディレクトリにないか、実行可能ではありません。

  1. 実行可能にします:chmod +x script.php
  2. 現在のディレクトリにある場合は、ファイル名だけではなくパスを入力します:./script.php

2の代わりに、ファイルを$PATHまたは $PATH にリストされている場所に移動/コピー/シンボリックリンクして、スクリプトを含むディレクトリを含めることができます。

38
Quentin

スクリプトが/usr/local/binになく、実行可能である場合は、次のように、スクリプトの前にphpを付ける必要があります。

php myscrip.php

シバンのために、私が使用するものは次のとおりです:

このような:

#!/usr/bin/php

またはこれ:

#!/usr/bin/env php
14
Banago

-dの1回限りの使用に関する@NVRMのコメントへの回答として、これは正しくありません。

chmod +x scriptで始まる

#!/usr/bin/php
<?php
phpinfo();

script | grep -E 'memory_limit|error_reporting'を実行すると、

error_reporting => no value => no value
memory_limit => 128M => 128M

-dエントリをいくつか追加して、

#!/usr/bin/php -d memory_limit=2G -d error_reporting=-1
<?php
phpinfo();

script | grep -E 'memory_limit|error_reporting'を再実行すると、次のように表示されます

error_reporting => -1 => -1
memory_limit => 2G => 2G

したがって、複数のオプションを設定できることを示しています。

実際、コマンドライン全体がここで作業しているものです。したがって、拡張機能をロードしたり、別の設定を使用したりすることができます。コマンドラインで実行できるすべてのことを行えます。

1

ここにいくつかの小さなメモを残します:


同じフォルダ内にあるphpバイナリを使用するには

例として、/usr/binからコピーされたphp7.2実行可能ファイルは、helloスクリプトに沿って同じパスにあります。

#!./php7.2
<?php

echo "Hello!"; 

それを実行するには:

./hello

どちらも同じように動作します:

./php7.2 hello

これにより移植性が得られますが、システムアーキテクチャに注意してください。phpバイナリはターゲットプラットフォームと一致しない場合があります。


ハッシュバングからの許可されたメモリの設定:

one INI entryをhashbang行から設定できます:

#!/usr/bin/php -d memory_limit=2048M
<?php
phpinfo();
exit;

次に、phpinfo()を使用して、phpが理解したかどうかを確認します。

./myphpProg | grep memory

正しいシェル出力には以下が含まれているはずです:

memory_limit => 2048M => 2048M

上記の実行は、次のコマンドラインと同様です。

php -d memory_limit=2048M myphpProg.**php**

Phpは一度に1つの-dパラメータしか受け入れないため、これがhashbangsに設定できるini値は1つだけである理由です。

0
NVRM