0

我有这个脚本,它将为通过它的任何 URL 生成缩略图(即 my_script.php?url=http://www.google.com

它可以工作,但我想修改它,以便我可以通过它传递大量(2,100)个 URL,并为每个 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。

我只是在努力将两者结合在一起。

有什么想法吗?

4

2 回答 2

2

您可以将 url 作为 json 编码的数组传递,然后json_decode将其放入脚本中的数组中。然后,您将使用 for-each 来遍历每个 url。

此外,您应该对如此大量的数据使用 POST,因为 GET 具有最大数据大小限制。

$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

第一个想法是,这听起来过程密集。通过您的网络浏览器执行此操作很容易让 php 在内存和时间限制上达到最大值。更好的选择可能是将 url 存储在数据库中并将批处理作为分叉进程运行。

于 2012-11-27T23:18:52.443 回答