php处理超时。我如何优化/排队以避免超时

时间:2020-03-26 08:02:09

标签: php

我有此php代码,用于备份图片/优化图片并重新上传图片以进行购物 它可以工作,但是在超时之前只对一些图像起作用,因为其中有很多图像,每个图像都经过多个处理。

有500多个图像。我能在没有脚本超时的情况下处理所有这些图像吗?

这是代码


<?php
//ini_set("display_errors", 1);
//error_reporting(E_ALL);
ini_set('memory_limit', '-1');
require_once("inc/functions.php");

require_once("lib/Tinify/Exception.php");
require_once("lib/Tinify/ResultMeta.php");
require_once("lib/Tinify/Result.php");
require_once("lib/Tinify/Source.php");
require_once("lib/Tinify/Client.php");
require_once("lib/Tinify.php");

\Tinify\setKey("xxxxxxxxx");

$requests = $_GET;
//$hmac           = $_GET['hmac'];
$serializeArray = serialize($requests);
$requests       = array_diff_key($requests, array('hmac' => ''));
ksort($requests);
$token    = "xxxxxx";
$shop   = "xxxxx";            //no 'myshopify.com' or 'https'
$storeURL = "https://" . $shop . ".myshopify.com";

$path = realpath("images");
if ( ! is_dir($path)) {
    mkdir('images', 0777);
}
$i = 1;
do {
    if ($i == 1) {
        $date = '2040-01-01T12:00:00-00:00';
    }
    $array    = array('limit' => '250', 'order' => 'created_at desc', 'created_at_max' => $date);
    $products = shopify_call($token, $shop, '/admin/api/2020-01/products.json', $array, 'GET');
    $products = json_decode($products['response'], JSON_PRETTY_PRINT);
    $i++;
    foreach ($products['products'] as $product) {
        $date = $product['created_at'];
        foreach ($product['images'] as $image) {

            $image_id = $image['id'];
            $image_tag = $image['alt'];
            $image_position = $image['position'];

            /* Process 1:  download and save image (Backup) */
            $path = realpath('images/' . $product['id']);
            if ( ! is_dir($path)) {
                mkdir('images/' . $product['id'], 0777);
            }
            $fileurl = $image['src'];
            $fileName = basename($image['src']);
            $names    = explode('?v=', $fileName);


            file_put_contents('images/' . $product['id'] . '/' . $names[0], file_get_contents($image['src']));
            /* End Process 1 */


            /* Process 2:  Optimise and save optimised Image */
                $source = \Tinify\fromUrl($fileurl);
                $path = realpath('images/' . $product['id'] .'/optimized');
                if ( ! is_dir($path)) {
                    mkdir('images/' . $product['id'] .'/optimized', 0777);
                }
                $source->toFile("images/" . $product['id'] . "/optimized/". $names[0]);

            /* End Process 2 */ 

                        $image = array(
                                       "image" => array(
                                      "id" => $image_id,
                                    )
                               );

            /* Process 3:  Delete image from shopify */                     
                $delete_image = shopify_call($token, $shop, "/admin/products/" . $product['id'] . "/images/".$image_id .".json", $image, 'DELETE');
                $deleted = $delete_image['response'];
             /* End Process 3 */    


              /* Process 4:  Upload Optimised image to shopify */   
               $imgurl = "http://xxxx/vendor/images/" . $product['id'] . "/optimized/". $names[0];  

                    $upload_image = array(
                                "image" => array(
                                    "position"=>$image_position,
                                    "alt"=> $image_tag,
                                    "src"=> $imgurl
                                )   
                    );

                    $upimage = shopify_call($token, $shop, "/admin/products/" . $product['id']. "/images.json", $upload_image, 'POST');
                    $uploaded = $upimage['response'];
               /* End Process 4 */

        }
    }
} while (count($products['products']) == 250);



任何建议都将受到高度赞赏。谢谢

0 个答案:

没有答案