[PHP-users 15673]PHPスクリプト内からPHP呼び出してエラー

shin ohira shin @ ohira.com
2003年 6月 4日 (水) 12:09:41 JST


いつもお世話になっております、おおひらともうします。

PHP 内から PHP を呼び出した場合に無限ループ(?) するという
現象が発生しています。
過去ログには、類似の現象についての記事を見つけられませんでした。

回避策や対処法ご存知のかたいらっしゃいましたら、おしえてください。


概要
	PHPで記述した cgi 内から PHP で記述したプログラムを
	system 関数で呼び出すと PHP のプロセスが大量に発生してしまい
	正常に終了しない。

現象の説明
	小さい再現プログラムを作成して調べたところ、コマンドラインからの
	実行では問題ないのに、ブラウザーから実行すると正常終了しない。
	telnet で 80 ポートにつないで実行しても同じ現象。

	system を passthru に書き換えることで、小さい際限プログラムでは
	問題無くなったように思えたが、再度目的のプログラムで passthru に
	書き換えてみたところ、system で実行した場合と同じ動作になってしまいました。

	phpのプログラムから呼び出すプログラムがCで書かれてコンパイルされたものだったり
	sh のスクリプトだったりした場合には、問題が発生しませんでした。

再現プログラム 1
#!/usr/local/bin/php
<?
print("start Test 1\n" ) ;
system("/usr/home/shin/public_html/cgi/test/test2.cgi") ;
//passthru("/usr/home/shin/public_html/cgi/test/test2.cgi") ;
print("end Test 1\n" ) ;
?>

再現プログラム 2
#!/usr/local/bin/php -q
<?
print("Test 2\n" ) ;
?>

再現プログラム 3
#!/bin/sh
echo TEST 22


コマンドラインからの実行結果
> ./test1.cgi
Content-type: text/html
X-Powered-By: PHP/4.3.1

start Test 1
Test 2
end Test 1


OS
	FreeBSD 4.8-STABLE

PHP	
	PHP 4.3.1 (cgi), Copyright (c) 1997-2002 The PHP Group
	Zend Engine v1.3.0, Copyright (c) 1998-2002 Zend Technologies

APACHE
apache_1.3.27> cat config.status
#!/bin/sh
##
##  config.status -- APACI auto-generated configuration restore script
##
##  Use this shell script to re-run the APACI configure script for
##  restoring your configuration. Additional parameters can be supplied.
##

./configure \
"--with-layout=Apache" \
"--enable-module=so" \
"--enable-suexec" \
"--suexec-docroot=/home" \
"--suexec-caller=apache" \
"$@"


マニュアル
system 外部プログラムの実行と表示
	http://www.php.net/manual/ja/function.system.php

マニュアル
passthru 外部プログラムを実行し、未整形の出力を表示します
	http://www.php.net/manual/ja/function.passthru.php


PHP-users メーリングリストの案内