0

渡された URL のサムネイルを生成するこのスクリプトがあります (つまり、my_script.php?url=http://www.google.com

動作しますが、大量 (2,100) の URL を渡してそれぞれのスクリーン ショットを生成できるように変更したいと考えています。これらの画像は、すでに別のフォルダーにも保存されています。

関連するコードは次のとおりです。

// If we're requesting
if ($_GET['auth'] == 'todc_admin') {
    if (isset($_GET['id'])) {
        $wb = new WebThumb();
        $wb->setApi("API-KEY-HERE");
        $job = $wb->requestThumbnail($_GET['url']);
        $job_id = $job[0]['id'];
        while (true) {
            $job_status = $wb->requestStatus($job_id);
            $status = $job_status['status'];
            if ($status == "Complete") {
                break;
            } else {
                sleep(5);
                continue;
            }
        }
        // Image generated so lets save it
        //header("Content-type: image/jpeg");
        $wb = new WebThumb();
        $wb->setApi("API-KEY-HERE");
        $filename = ABSPATH . todc_design_dir($_GET['id']) .'/thumbnail.jpg';
        $imgurl = todc_design_dir($_GET['id']) .'/thumbnail.jpg';
        $content = $wb->getThumbnail($job_id, "large");
        if (file_put_contents($filename, $content)) {
            echo '<img src="http://www.myurl.com'. $imgurl .'" />';
        }
    }
}

これを使用するためのサムネイルを作成するために必要なすべての URL のリストを生成することもできます。

$designs = get_posts( array('post_type' => 'design', 'post_status' => 'publish', 'orderby' => 'date', 'showposts' => -1) );

    foreach($designs as $design) { 

            $previewlink = get_bloginfo('wpurl') . todc_design_dir($design->ID)

次に、必要な場所で $previewlink をエコーし​​ます。

私はちょうど2つを一緒にするのに苦労しています。

何かご意見は?

4

2 に答える 2

2

URL を json でエンコードされた配列として渡し、それをjson_decodeスクリプトの配列に入れることができます。次に、for-each を使用して各 URL を反復処理します。

また、GET には最大データサイズの制限があるため、このような大量のデータには POST を使用する必要があります。

$urls = json_decode($_POST['url']);
foreach ($urls as $url) {
    $job = $wb->requestThumbnail($url);
    // rest of code
}

100 個の URL の処理にかかる時間によっては、スクリプトの最大実行時間を増やす必要がある場合もあります。これに使用set_time_limit(int $seconds)します。

于 2012-11-27T23:19:39.670 に答える
0

最初に考えたのは、これはプロセス集約的に聞こえるということです。Web ブラウザーを介して行うと、php がメモリと時間の制限を最大限に活用する傾向があります。より良いオプションは、URL をデータベースに保存し、フォークされたプロセスとしてバッチを実行することです。

于 2012-11-27T23:18:52.443 に答える