0

バックグラウンド プロセスの実行が終了した後でも、PHP スクリプトが「ハング」するという非常に奇妙な問題が発生しています。Tomcat Apache がインストールされた PHP 5.3、Windows Server 2008 R2、IIS7 を実行しています。

プロジェクトの背景私のスクリプトは、「shell_exec()」関数を介して PDF フォームを生成します。1 ~ 3,000 のフォームを生成できます。すべてのフォームが生成されると、ダウンロード リンクと「最初からやり直す」リンクがページの下部に表示されるはずです。 server を開き、すべてのファイルの生成が完了したことを確認します。

この問題は、3 ~ 6 分かかる 300 以上のフォームを生成する場合にのみ発生します。

php.ini の「max_execution_time」を 1200 (20 分) に設定し、IIS7 の「接続タイムアウト」も 1200 秒に設定しました。これらの設定が正しく設定されていることを確認するために、これらの設定の写真へのリンクを 次に示します 。

不足している別の設定はありますか? 私が気付いていない Tomcat Apache 接続タイムアウト設定はありますか? PHP には、「max_execution_time」と「set_time_out」以外に別の「タイムアウト」設定がありますか? 「while ループ」の実行が終了し、すべての PDF が正常に作成された後でも、スクリプトがハングし続ける理由がわかりません。

すべてのヘルプ/アドバイスに感謝します。

While ループ コード

/* build zip & directory for PDFs */
$zip = new ZipArchive;
$time = microtime(true);

    $new_dir = "c:/pdfgenerator/f-$time";
    if(!file_exists($new_dir)) {
      mkdir($new_dir);
    }


$res = $zip->open("pdf/tmppdf/mf-pdfs_" . $time . ".zip", ZipArchive::CREATE);


$num = 0;
while($row = mysql_fetch_array($result)) {

    /* associate a random # assigned to each PDF file name */
    $num++;
        include($form);
    $rand = rand(1,50000);
     $file_num = $num * $rand;

    $fo = fopen('c:\\pdfgenerator\\f-' . $time . '\\mf_pdf-' . $time . '-' . $file_num . '.html', 'w') or die("can't open file");

    fwrite($fo, $output);
    echo shell_exec('c:\wkhtmltopdf\wkhtmltoimage c:\\pdfgenerator\\f-' . $time . '\\mf_pdf-' . $time . '-' . $file_num . '.html c:\\pdfgenerator\\f-' . $time . '\\mf_pdf-' . $time . '-' . $file_num . '.jpeg');

    /* the follow uses ghost script to execute the ImageMagick convert command from cmd.exe */
    $magick_dir = 'C:\imagemagick'; // install IM in short DOS 8.3 compatible path
    $send_cmd=$magick_dir .'\convert c:\\pdfgenerator\\f-' . $time . '\\mf_pdf-' . $time . '-' . $file_num . '.jpeg -resize "1710x2200^!" c:\\pdfgenerator\\f-' . $time . '\\mf_pdf-' . $time . '-' . $file_num . '.jpeg' ;

    echo shell_exec($send_cmd);
    $send_cmd=$magick_dir .'\convert c:\\pdfgenerator\\f-' . $time . '\\mf_pdf-' . $time . '-' . $file_num . '.jpeg c:\\pdfgenerator\\f-' . $time . '\\mf_pdf-' . $time . '-' . $file_num . '.pdf';
    echo shell_exec($send_cmd);

    /* EO ghostscript code */

/* add the newly generated files to the Zip Archive */
    if ($res === TRUE) {
    //echo "RESULT TRUE...";
     $zip->addFile('c:/pdfgenerator/f-' . $time . '/mf_pdf-' . $time . '-' . $file_num . '.pdf','c:/pdfgenerator/f-' . $time . '/mf_pdf-' . $time . '-' . $file_num . '.pdf');

    //echo "FILE ADDED!";
    } 

}
echo "<h2><a href=\"http://50.63.85.232/med/pdf/tmppdf/mf-pdfs_$time.zip\">Download Zip</a></h2>";
echo "<h2><a href=\"index.php\">Start Over</a></h2>";
$zip->close("pdf/tmppdf/mf-pdfs_" . $time . ".zip", ZipArchive::close());
}

}

特定のシェルライン

echo shell_exec('c:\wkhtmltopdf\wkhtmltoimage c:\\pdfgenerator\\f-' . $time . '\\mf_pdf-' . $time . '-' . $file_num . '.html c:\\pdfgenerator\\f-' . $time . '\\mf_pdf-' . $time . '-' . $file_num . '.jpeg');

    /* the follow uses ghost script to execute the ImageMagick convert command from cmd.exe */
    $magick_dir = 'C:\imagemagick'; // install IM in short DOS 8.3 compatible path
    $send_cmd=$magick_dir .'\convert c:\\pdfgenerator\\f-' . $time . '\\mf_pdf-' . $time . '-' . $file_num . '.jpeg -resize "1710x2200^!" c:\\pdfgenerator\\f-' . $time . '\\mf_pdf-' . $time . '-' . $file_num . '.jpeg' ;

    echo shell_exec($send_cmd);
    $send_cmd=$magick_dir .'\convert c:\\pdfgenerator\\f-' . $time . '\\mf_pdf-' . $time . '-' . $file_num . '.jpeg c:\\pdfgenerator\\f-' . $time . '\\mf_pdf-' . $time . '-' . $file_num . '.pdf';
    echo shell_exec($send_cmd);
4

1 に答える 1

0

PHP 5.5 で非推奨になったすべてのmysql_ functionsを変換し、 MySQLi関数を利用しました。

于 2013-01-30T00:04:35.477 に答える