我有这个脚本会为通过它的任何网址生成缩略图(例如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 .'" />';
}
}
}
我还能够生成一个列表,其中包含了创建缩略图所需的所有网址:
$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。
我只是在努力把两者放在一起。
有什么想法吗?
答案 0 :(得分: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个网址需要处理多长时间;请使用set_time_limit(int $seconds)
。
答案 1 :(得分:0)
首先想到的是这听起来过程密集。通过Web浏览器进行操作很容易让内存和时间限制最大化。更好的选择可能是将URL存储在数据库中,并将批处理作为分叉进程运行。