ホームページ > バックエンド開発 > PHPチュートリアル > PHPバッチ処理、ビッグデータ処理、長期処理_PHPチュートリアル

PHPバッチ処理、ビッグデータ処理、長期処理_PHPチュートリアル

WBOY
リリース: 2016-07-13 17:52:27
オリジナル
1093 人が閲覧しました

最近、データベース内の画像の名前を読み取り、対応する画像にアクセスし、画像のサイズと解像度を読み取り、データベースに再保存する必要があるため、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の値を設定します

[php] plaincopy を表示

@%PHPCLI% %0 %PHPCLI% は上で設定したパスを表し、%0 は .bat ファイルが配置されているパスを表します。この組み合わせは、php.exe が .bat ファイルの実行に使用されることを意味します。

上記の現象が発生します。PHP は REM をコメントとはみなさず、ただ通常の文字とみなします。

は最初に@REMを出力し、次に
を出力します

[php]

@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]

@goto :EOF

プログラムを終了します。

なぜこれをやらないのかと誰かが尋ねました:


[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

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/478115.html技術記事最近、PHP で書かれたものに取り組んでいます。データベース内の画像の名前を読み取り、対応する画像にアクセスし、画像のサイズと解像度を読み取り、データベースに再保存する必要があるからです。 ...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート