最近、データベース内の画像の名前を読み取り、対応する画像にアクセスし、画像のサイズと解像度を読み取り、データベースに再保存する必要があるため、PHP で書かれたものに取り組んでいます。データ量は現在 5,000 のみです。設定を追加しない場合、PHP のデフォルトの最大実行時間は 30 秒です。
つまり、30 秒以内に 700 項目しか処理できません。最初は手動でしか実行できず、その後は 700 個または 700 個の項目を実行します。後から思ったのですが、将来的にはデータ量が10Wを超えてしまい、死ぬほど疲れてしまいます。
ネットで調べてみると、対処法は3つあります。
最初のタイプ
デフォルトは 30 秒なので、それよりも長い時間を設定します。そうでない場合は、制限はありません。
php ini_set('max_execution_time', '100'); 関数を追加します。100 を設定すると、制限がないことを意味します。 (追記: 私は zend を組み合わせて使用しています。0 に設定すると、無制限ではなく、約 120 になります。私の解決策は、この値を非常に大きく設定することです)
2種類目
とても気に入っています。php とバッチ処理を組み合わせて使用しています。
[php]
@REM
@REM =='
@SET PHPCLI="D:Program FilesZendZend Studio - 8.0.1pluginsorg.zend.php.debug.debugger.win32.x86_5.3.18.v20110322resourcesphp53php.exe"
@REM PHPCLI php.exe のパスを設定します
@%PHPCLI% %0
@goto :EOF
@レム';?>
include'C:\Program Files\Zend\Apache2\htdocs\pic_gather\pic_operate.php';
「rfinish」をエコーします。
ob_flush();
exec("一時停止")
?>
バッチ処理コマンドなので、1時間かけてバッチ処理コマンドを調べました。上記のプログラムをざっくり翻訳してみます。
@: 次の指示を表示しません。削除すると、コマンド ウィンドウに指示が表示されます。
REMはバッチ処理用のコメント、以下はコメントなので実行されません。 @ とは異なり、@ はコマンドが出力されないことを意味するだけであり、コメントを表しません。
[php]
@SET PHPCLI="D:Program FilesZendZend Studio - 8.0.1pluginsorg.zend.php.debug.debugger.win32.x86_5.3.18.v20110322resourcesphp53php.exe"
PHPCLIの値を設定します
@%PHPCLI% %0
%PHPCLI% は上で設定したパスを表し、%0 は .bat ファイルが配置されているパスを表します。この組み合わせは、php.exe が .bat ファイルの実行に使用されることを意味します。
上記の現象が発生します。PHP は REM をコメントとはみなさず、ただ通常の文字とみなします。
は最初に@REMを出力し、次に
を出力します
@REM =='
@SET PHPCLI="D:Program FilesZendZend Studio - 8.0.1pluginsorg.zend.php.debug.debugger.win32.x86_5.3.18.v20110322resourcesphp53php.exe"
@REM PHPCLI php.exe のパスを設定します
@%PHPCLI% %0
@goto :EOF
@レム';?>
ここで、php.exeは認識されるということでしょうか? @はPHPで認識できるのでしょうか?これはエラーを抑制することを意味し、文字列 '' の内容が REM を含む == である場合、@ によって抑制されたエラーがあります。平和に乗り越えてください。
次のセクションに進む
[php]
include'C:\Program Files\Zend\Apache2\htdocs\pic_gather\pic_operate.php';
「rfinish」をエコーします
ob_flush(); exec("一時停止")
?>
ここに実行したいプログラムがあります。ここには書きたくないので、.bat がテンプレートになりやすいように含めておきます。
php.exe は完了しましたが、バッチ コマンドはまだ完了していません。
[php]
@%PHPCLI% %0
後、バッチ処理コマンドがphpの言語を認識しないのを防ぐために
を使用しました
[php]
プログラムを終了します。
なぜこれをやらないのかと誰かが尋ねました:
[php]
@SET PHPCLI="D:Program FilesZendZend Studio - 8.0.1pluginsorg.zend.php.debug.debugger.win32.x86_5.3.18.v20110322resourcesphp53php.exe"
@%PHPCLI% %0
@goto :EOF
「C:\Program Files\Zend\Apache2\htdocs\pic_gather\pic_operate.php」をインクルードします
「rfinish」をエコーします。
ob_flush();
exec("一時停止")
?>
そんなに複雑にする必要はないので、私もやってみました
cmd コマンドラインが表示されることがわかりました:
@SET PHPCLI="D:プログラム ファイルZendZend Studio - 8.0.1pluginsorg.zend.php.debu
g.debugger.win32.x86_5.3.18.v20110322resourcesphp53php.exe"
@REMPHPCLI
@%PHPCLI% %0
@goto :EOF
このコードの元の作成者は、この状況を避けて大量のジャンク情報を出力したかっただけです。
これが原作者の洞察です。
3つ目のタイプ
これを行うと、内部の文字列情報を更新するだけで済みます。たとえば、クラスクラスを設定する場合、class='natural scene' の場合、画像の前に pic_gather/nature/image を追加します。その場合、上記のような複雑なことを使用する必要はなく、SQL 言語を直接使用するだけです。 concat() 関数にはそのような機能があります。
著者:wolinxuebin