私のサイトには、jqueryajax関数を使用して呼び出されるPHPスクリプトがあります。基本的に、ユーザーは私のサイトのボタンを押すと、このPHPスクリプトにajax呼び出しを送信し、次にproc_openを使用してサーバー上のpythonスクリプトを呼び出します。これは、Firefoxでテストするとすべて正常に機能しますが、他のブラウザー(chrome、safari、mobile safari)でテストすると、スクリプトが無限ループになります。また、PHPスクリプトを直接呼び出して(URLをブラウザーに貼り付けて)、jqueryで無限ループが発生するかどうかを確認しましたが、同じ結果が得られました(ffでは正常に実行されますが、他のすべてのブラウザーでは無限ループになります)。私が理解していることから、PHPコードはサーバー側で実行され、出力はクライアントブラウザーに送信されるため、スクリプトがFirefoxでのみ実行されている理由がわかりません。
これが私のphpコードです:
<?php
require('../include/constants.php');
session_start();
if(!isset($_SESSION['logged_in'])||!$_SESSION['logged_in'])
{
header('location:../login.php');
}
$link = mysql_connect(DB_SERVER,DB_USER,DB_PASSWORD);
mysql_select_db(DB_NAME);
$q = "SELECT `cupiduser`,`cupidpass` FROM `users` WHERE `email`='".$_SESSION['email']."' LIMIT 1;";
$result = mysql_query($q);
$row = mysql_fetch_assoc($result);
$minage = $_GET['min'];
$maxage = $_GET['max'];
$descriptorspec = array(
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
2 => array("pipe", "w") // stderr is a file to write to
);
$cmd = 'python ~/data/users/demo2.py "'.$row['cupiduser'].'" "'.$row['cupidpass'].'" "'.$minage.'" "'.$maxage.'"';
$proc = proc_open($cmd, $descriptorspec, $pipes);
if(is_resource($proc))
{
fclose($pipes[0]);
$count = fread($pipes[1], 512);
fclose($pipes[1]);
fclose($pipes[2]);
$exit = proc_close($proc);
}
echo trim($count);
ob_end_flush();
ob_flush();
flush();
ob_start();
?>
Pythonコードはいくつかの計算を実行しているだけで、最後に次のような数値を返します。
print str(count)