ID: 26060 User updated by: datacompboy at mail dot ru Reported By: datacompboy at mail dot ru -Status: Feedback +Status: Open Bug Type: cURL related Operating System: Win2003 adv server PHP Version: 4.3.3 New Comment:
Sorry for delay with report - was a bit busy (I have made work-around via moveing all download/transform features to spawned program) Removeing ob_* does not matter, only I can't send headers if spawned process shows info - the Header function set after echo `filter`... In end of this comment I added script, that simplified (HTML parser removed) If you run an lot of requests at one time (I have tested in local by pressing F5 key for a while) - then in directory of scrpit will created several *.TMP files, and not removed. if comment out line echo `echo trans.exe $lang $infile $outfile`; then no this TMP files left. As you see, I have changed external filter to just echo, so this not filter problem. This looks like problem of external app spawning... <? // dl("php_curl.dll"); error_reporting (E_ALL ^ E_NOTICE); set_time_limit( 60 ); ignore_user_abort ( 1 ); ob_start(); $transself = "http://"; if (isset($_SERVER["HTTP_HOST"])) { $transself .= $_SERVER["HTTP_HOST"]; } else { $transself .= $_SERVER["SERVER_NAME"]; } if (isset($_SERVER["URL"])) { $transself .= $_SERVER["URL"]; } else { $transself .= $_SERVER["SCRIPT_NAME"]; } if ($_SERVER["REQUEST_METHOD"]=="GET") { if (empty($_GET["_translator_lang"])) { $lang = $_GET['lang']; $url = $_GET['url']; $ref = ''; $post = 0; } else { $lang = $_GET['_translator_lang']; $ref = $_GET['_translator_referrer']; $url = $_GET['_translator_form']; $qs = ''; $req=array(); foreach ($_GET as $na => $va) { if (strcmp($na,'_translator_lang')&& strcmp($na,'_translator_referrer')&& strcmp($na,'_translator_form')) { $req[]="$na=".urlencode($va); } } $qs = join("&", $req); $url .= "?".$qs; $post = 0; } } else if ($_SERVER["REQUEST_METHOD"]=="POST") { $lang = $_POST['_translator_lang']; $ref = $_POST['_translator_referrer']; $url = $_POST['_translator_form']; $post = 1; $qs = ''; $req=array(); foreach ($_POST as $na => $va) { if (strcmp($na,'_translator_lang')&& strcmp($na,'_translator_referrer')&& strcmp($na,'_translator_form')) { $req[]="$na=".urlencode($va); } } $qs = join("&", $req); } else die("Unsupported method"); if (!$lang ) { die("No language"); } if (!preg_match('#^http(?:s?)://#', $url)) { die("Incorrect URL"); } if (preg_match('#^http(?:s?):[/]+[^/]*$#', $url)) { $url.='/'; } $oinfile = tempnam ("./", "URLIN"); $infile = preg_replace("#.*[/\\\\](.*?)#","\$1",$oinfile); $ooutfile = tempnam ("./", "URLOU"); $outfile = preg_replace("#.*[/\\\\](.*?)#","\$1",$ooutfile); $inf = fopen($infile, "w"); fwrite($inf, "<meta http-equiv=\"Content-Type\" content=\"text/html\">\n"); $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt ($ch, CURLOPT_HEADER, 0); curl_setopt ($ch, CURLOPT_FILE, $inf); if (strlen($ref)>0) { curl_setopt($ch, CURLOPT_REFERER, $ref); } if ($post) { // if (preg_match("#^multipart",$_SERVER['CONTENT_TYPE'])) // { // post as multipart/formdata // } else { // post as application/x-www-form-urlencoded curl_setopt ($ch, CURLOPT_POST, 1); curl_setopt ($ch, CURLOPT_POSTFIELDS, $qs); curl_setopt ($ch, CURLOPT_POSTFIELDSIZE, strlen($qs)); } } if (curl_exec ($ch)) { fclose($inf); echo `echo trans.exe $lang $infile $outfile`; // Show output to browser with transform $inf = @fopen($outfile, "r"); if (!is_resource($inf)) $inf = @fopen($infile, "r"); if (is_resource($inf)) { $codepage=chop(fgets($inf)); // get codepage of translated document preg_match("#text/html[^;]*;[ ]*CHARSET=([^'\"]*)#i", $codepage, $m); header("Content-type: text/html; charset=".$m[1]); fpassthru($inf); } } @fclose($inf); curl_close ($ch); @unlink ($infile); @unlink ($outfile); @unlink ($oinfile); @unlink ($ooutfile); ob_end_flush(); ?> Previous Comments: ------------------------------------------------------------------------ [2003-11-06 15:29:41] [EMAIL PROTECTED] And provide an actually working script..(one that COULD actually work) ------------------------------------------------------------------------ [2003-11-06 15:28:03] [EMAIL PROTECTED] Simplify your script..drop the ob_* stuff totally and don't use any external apps on the files. Does it work then? (add the new script here too) ------------------------------------------------------------------------ [2003-10-31 12:42:18] datacompboy at mail dot ru Description: ------------ I tried to download file with curl, parse it with external app, show output and kill temp file. But: 1. if php as isapi module - when several requests at one time some inputs are locked! Filemon says that it frees by some cmd.exe after all runned sub-processes already finished. Very strange! 2. if php as fastcgi - it often crashes with error in php_curl (all latest dlls in system32 upgraded; php4ts only in c:\php, php4isapi also in c:\php and no in c:\windows\system) 3. if php as cgi - all OK, except of when user cancelled download the script terminated, but shotdown_procedure not called, so temp files left. Reproduce code: --------------- <?ob_start(); $url="http://some.site.com"; $oinfile = tempnam ("./", "URLIN"); $infile = preg_replace("#.*[/\\\\](.*?)#","\$1",$oinfile); $ooutfile = tempnam ("./", "URLOU"); $outfile = preg_replace("#.*[/\\\\](.*?)#","\$1",$ooutfile); register_shutdown_function(create_function('', "@unlink(\"$infile\"); @unlink(\"$outfile\"); @unlink(\"$oinfile\"); @unlink(\"$ooutfile\"); return 1;")); $inf = fopen($infile, "w"); fwrite($inf, "<meta http-equiv=\"Content-Type\" content=\"text/html\">\n"); $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_FILE, $inf); $st=curl_exec ($ch); curl_close ($ch); fclose($inf); echo `filter.exe $lang $infile $outfile 2>&1`; ob_end_flush(); ?> Expected result: ---------------- No .tmp files not in windows\temp\ folder, not in script folder. Actual result: -------------- Some .tmp files left and in windows\temp, and in script folder. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=26060&edit=1