| -2243- PHP スクリプト |
|
前の記事で PHPの「お勉強」を始めたと書いた。60の手習いならぬ「70過ぎて!の手習い」だ。だが新しい言語の勉強はボケ防止には良いとどこかで見たが、プログラム言語も記憶力・推察力・判断力など頭の多くの部分を使うから脳の血流はいいと信じて励んでいる。 そんなことはともかく、その PHPの関数でここ1週間近く悩んでいたことがある。 それは親php スクリプトから 子のphp スクリプトを呼んで、処理結果を戻す処理をしようとして、exec() 関数を使用したところ、何故か Webサーバーでは失敗(fail)が返される。もちろん同じスクリプトを Localで実行すると問題無いから使い方に間違いはなさそう。 exec()関数は、しばらく前に perlスクリプトを呼ぶために使用したことがあるが、その時は問題なく動作した。Web掲示板などで相談してみたが、それらのアドバイスを試してみても動作しない。 ただ普通の phpスクリプトは開始行が <?php で始まると実行できるが、exec() 関数で呼んだ場合は処理する言語のインタプリタの実行ファイルパスを指定する必要があるらしいと分かった。そこでサーバーのマニュアルをチェックすると私の使用しているサーバーには phpのパスの項目が抜けているではないか! それはそれで問題なんだが、とりあえず他のサーバーの記述などを参考にして phpのパス(/usr/local/bin/php など考えられる限りのパス)を exec() 関数の中や 子スクリプトにシェバング行として指定してみたが、どれもそのパスはディレクトリとしてもファイルとしても存在しないというようなエラーが返される。Webの記事を参考に phpのパスを返すシェルコマンドの "which php" を実行するため exec() でシェルスクリプトを実行してみたが which: no php in (/usr/local/bin:/usr/bin:/bin) と返されてしまう。どうやらこのサーバーには phpの実行ファイルへのリンクが無いらしいと推測した。通常の phpスクリプトの実行は問題ないので、ファイル名の拡張子 .phpや .html内で <:?php が出現すれば Webサーバーが phpとして解釈して phpインタプリタに処理を渡してくれるが、更にそのphpスクリプトの中で exec()が実行された場合、それを解釈するのは phpのインタプリタになるのでスクリプト中の <:?php が出現するとそれを渡す新たなインタプリタの実行ファイルのパスを指定する必要があるのだろうが、自分で自分のパスを指定出来ないという皮肉な結果! と言っていても、それが言語仕様なら従うしかないが、そのパスが分からない。 この時点でこれ以上は一ユーザーの手には負えないとレンタルサーバーのサポートに質問してみた。上記のように同じレンタルサーバー内の別のサーバーのマニュアルにははっきり記述があるんだから、マニュアルの不備であることは明白だが、クレーマーと思われないようにそこは表面に出さないで、あくまで質問として。今日になってその返事が来た。何と /usr/local/php/7.3/bin/php だという。確かにこのパスを指定してみると Childプロセスの phpスクリプトが問題なく実行できた。こうしてやっと一件落着! というような次第で、あらゆる可能性を考えながらプログラムを仕上げていくことになり、本当にボケ防止には良さそうだ。 本当に久しぶりだが今日の写真は「セイヨウニンジンボク」という木の花。孫がどこかの園芸店で探して「これがいい」と言ったとかで、娘が買ってきて植えたもの。珍しい紫色の花で比較的花の少なくなった季節に綺麗な花が長い間楽しめる。「ニンジンボク」という名前は葉っぱが朝鮮人参の葉っぱに似ているからとか。 |
|
2022/09/27 |