php.iniで追加の拡張が有効になっていると、PHPスクリプトはCLIパラメータを読み取ることができません。

php.iniで追加の拡張が有効になっていると、PHPスクリプトはCLIパラメータを読み取ることができません。

正しいStackExchangeに投稿してください。

PHP CLIを使用しながら、非常に奇妙な問題に直面しました。私はSymfonyフレームワークを使用しています/etc/php5/cli/php.ini

長い記事より以下をご覧ください。


1/通常出力、拡張なし

app/console doctrine:schema:update

Nothing to update - your database is already in sync with the current entity metadata.

→確認 注:アプリ/コンソールはシェルバンを含むPHPスクリプトです。

app/console doctrine:schema:update --force

Nothing to update - your database is already in sync with the current entity metadata.

→確認--forcePHPがスクリプトに渡したSymfonyオプションです)


2/ PHPに2つの拡張機能を追加

php.iniを編集しますsudo vim /etc/php5/cli/php.ini。 2行を追加します。

extension=cairo.so
extension=php_gtk2.so

これらの拡張は完全に機能します。警告もなく、エラーもありません。


3/ PHPが「衝突」しました。無関係な2つの拡張機能が追加されました。

app/console doctrine:schema:update

Nothing to update - your database is already in sync with the current entity metadata.

→確認...しかし:

app/console doctrine:schema:update --force

PHP Fatal error:  Option inconnue --force in Unknown on line 0
Could not startup.

→何?シンフォニーのせいではありません... 注:フランス語のみを意味しますOption inconnueUnknown option

他のコマンド、Symfonyコマンド、またはスタンドアロンPHPスクリプトにも同じ効果があります。


結論として:PHPには、呼び出されたPHPスクリプトにオプションを渡す奇妙な方法があります。

私もphp前に載せたが、app/consoleあまり変化がないですね。 php.iniで拡張機能をコメントアウトまたは削除すると、すべてがうまく機能します。この2行だけが関連しています。

編集:PHPを5.5.12から5.6.3にアップグレードしましたが、同じ問題が発生しました。

答え1

私はLinuxでPHP 5.6.1(cli)を実行していますが、drushを使用しようとすると同じ問題に直面しました。 PHP cliスクリプトを実行するたびに、次のメッセージが表示されます。

PHP 致命的なエラー: 不明なオプション --whatever-option-you-have

簡単なスクリプトを自分で作成したことを確認するには、次の手順を実行します。

#!/usr/bin/env php
<?php
echo ("Test");

php.iniから「php_gtk2.so」を削除するとエラーが消えました。

この問題はphp_gtk2.soまたはここに追加した拡張機能でのみ発生しますか? cairo.soを離れると同じエラーが発生しますか?

これはPHPの本当に奇妙な動作です!

関連情報