• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ブラウザで実行する場合はOKだが、コマンドラインから実行するとエラーが出る問題について)

コマンドラインからの実行でエラーが発生する問題について

このQ&Aのポイント
  • phpであるページから文字列を抽出するプログラム(FILE.php)を作成しました。
  • ブラウザで実行する場合は正常に動作しますが、コマンドラインから実行すると文字列を見つけられません。
  • cronからphpファイルを呼び出して実行したいのですが、動作しません。原因を特定できません。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4903/10364)
回答No.3

#2です。 mb_stringを使う際には文字コードを指定する必要があります。 php.ini またはスクリプト中のini_set()で指定します。 デフォルトはたしかLatin-1(ヨーロッパ文字)とかです。これがデータとあってないとmb_string関数は正しく動きません。 おそらく、ウェブ環境だけ正しく設定されて、コマンドライン環境(cgi環境もしくはcli環境)で正しく設定されていないと思われます。私がアドバイスしたとおり、コマンドライン環境でのphpinfo()を見て、文字コードセット指定部分をウェブ環境のphpinfo()と同じになるように、ini_set()で設定してください。

narusuji
質問者

お礼

ありがとうございます。 おっしゃる意味がやっと分かりました。 ブラウザで実行したphpinfo()とコンソールから実行したphpinfo()では内容が違いました。 .htaccessでphp.iniファイルの設定をしたつもりでしたが、これはブラウザに適応されるんですね。 コンソールからphpinfo()を実行し、出力結果ファイルをhtml形式で保存しそれぞれ確認したところ、コンソールのphpinfoはデフォルト設定のままでした。 mbstring.internal_encodingの部分がそれぞれ、SJISとEUCでしたのでアドバイスどおり、 ini_set("mbstring.internal_encoding","SJIS"); を追加したところコマンドラインからでもちゃんと動作しました。 完璧のパーフェクトです。 ありがとうございました!

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4903/10364)
回答No.2

「エラーが出る問題」と書いてありながら、エラーメッセージが書いてないです。 コマンドライン環境(cgiなのか、cliなのか??)では、mb_string関係の設定がなされていないのでは? echo '<?php phpinfo();?>' | php で、調べて、おかしければini_set()で設定するのかな。

narusuji
質問者

お礼

ご回答ありがとうございます。 XREAを使用しています、mb_stringを問題なく使える環境です。 以下の様に変数$tempに入れた日本語の文章から、欲しい文字列を探しています。 if(mb_ereg("文字列.+?もじれつ",$temp,$match)){ print "$match[0]"; } if(mb_ereg("モジレツ.+?モジレツダヨ",$temp,$match)){ print "$match[0]"; } ブラウザで上記内容のphpファイルを実行すると漢字、カタカナどちらも指定した文字列を見つけてブラウザの画面に出力してくれます。 が、コマンドラインから php filename.php と実行すると"mbregex compile err"とエラーが出ます。 指定されたエラー行は、mb_ereg("カタカナ",$temp,$match)でした。コマンドラインから実行する場合、カタカナ行を検索する時にエラーが起こっている様です。(mb_ereg()で\xを使い、バイナリ形式に変更してみましたがカタカナの文字列を検索する時だけエラーが起こりました。) 自宅パソコンにdebian環境でapache,phpなどをインストールし同じケースで実行してみたところエラーは出ませんでした。 何について理解不足なのかわからず少し混乱しています。 しばらく試行錯誤してみたいと思います。説明不足で申し訳ありません。

すると、全ての回答が全文表示されます。
  • tompink
  • ベストアンサー率50% (6/12)
回答No.1

パーミッションは正しいですか?直接phpを実行するには、パーミッションの設定を正しく行うことが必要です。 また、phpファイルはcronから直接起動できない(詳しくは分からないが、以前できなかった経験が・・・)場合があるので、間接的にシェルスクリプトなどを利用してやってみてください。

narusuji
質問者

お礼

ご回答ありがとうございます。 シェルスクリプトからphpファイルを実行しています。 cronからシェルスクリプトは実行されていますが、phpのプログラム自体に問題があるのかもしれません。

すると、全ての回答が全文表示されます。

関連するQ&A