perl システムコマンド実行後 500 エラーがでる
perl で、システムコマンドを実行させると実行後 500 エラーがでる。
トレースでは、プログラムは最後まで行ってるのに・・・
答えは、すごく単純なことなんだけど、はまってしまうことありますよね?
例えば、
system(“unzip XXXX.zip”)
このあとで画面の再表示モジュールへ。
すると 500 エラーが画面に表示される。
なんで?
system コマンドでコマンドを実行すると、実行結果が標準出力に送られる。
すると、
画面の再表示モジュールで
print “Content-type: text/html\n\n”;
今から、html だしますよって宣言する前に標準出力へsystem の実行結果が送られます。
すると Content-type: text/html\n\n が無効になります。
その結果、500 エラーになる。
対策としては、system コマンドの前に
Content-type: text/html\n\n
を出しておく。。。のも手ですけど、そうすると再表示画面が表示されてもゴミが出る可能性があります。
なので、
パイプを使って system コマンドの出力をファイルに送り込んでしまいます。
例えば、こんな感じ
system(“unzip XXXX.zip > log.txt”)
これで解決。
トレースでは、プログラムは最後まで行ってるのに・・・
答えは、すごく単純なことなんだけど、はまってしまうことありますよね?
例えば、
system(“unzip XXXX.zip”)
このあとで画面の再表示モジュールへ。
すると 500 エラーが画面に表示される。
なんで?
system コマンドでコマンドを実行すると、実行結果が標準出力に送られる。
すると、
画面の再表示モジュールで
print “Content-type: text/html\n\n”;
今から、html だしますよって宣言する前に標準出力へsystem の実行結果が送られます。
すると Content-type: text/html\n\n が無効になります。
その結果、500 エラーになる。
対策としては、system コマンドの前に
Content-type: text/html\n\n
を出しておく。。。のも手ですけど、そうすると再表示画面が表示されてもゴミが出る可能性があります。
なので、
パイプを使って system コマンドの出力をファイルに送り込んでしまいます。
例えば、こんな感じ
system(“unzip XXXX.zip > log.txt”)
これで解決。
スポンサーリンク