0

OpenCart Framework バージョン 3.0.2.0 にはバグがあります。

間にスペースが含まれるファイル名のファイルがあると、処理と実行に時間がかかりすぎます

例:考慮してください

img = https://DomainNameServer/image/catalog/pimages/SKU 081985 P80.jpg

<?php

set_time_limit(0);
ignore_user_abort(true);

public  function addSubImages($images){    
      $Image =array();

      foreach($images['img'] as $key => $img){

          $headers[] = 'Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg';              
          $headers[] = 'Connection: Keep-Alive';         
          $headers[] = 'Content-type: application/x-www-form-urlencoded;charset=UTF-8';         
          $user_agent = 'php';         
          $process = curl_init($img); // http://localhost/bluemb/image/catalog/pimages/SKU 081985 P80.jpg    
          curl_setopt($process, CURLOPT_HTTPHEADER, $headers);         
          curl_setopt($process, CURLOPT_HEADER, 0);         
          curl_setopt($process, CURLOPT_USERAGENT, $user_agent);
          curl_setopt($process, CURLOPT_TIMEOUT, 1800);   
          curl_setopt($process, CURLOPT_CONNECTTIMEOUT, 0); 
          //curl_setopt($process, CURLOPT_CONNECTTIMEOUT, 1700); 
          curl_setopt($process, CURLOPT_RETURNTRANSFER, 1);         
          curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1);         
          $return = curl_exec($process);         
          curl_close($process);         
          //return $return;  

          $filepath  = pathinfo($img);
          $dirname  = DIR_IMAGE.'catalog/prod/';

          if (!file_exists($dirname)) {
            mkdir($dirname, 0755, true);
          } 

          if (!empty($dirname)) {
            $srcfile = $img;
            $dstfile = DIR_IMAGE.'catalog/prod/'.$filepath['basename']; // /var/www/html/opencart/image/catalog/prod/SKU 081985 P80.jpg
            $Image[] = 'catalog/prod/'.$filepath['basename'];  //catalog/prod/SKU 081985 P80.jpg
            copy(str_replace(" ","%20",$srcfile), $dstfile);
            //file_put_contents($dstfile,$return);
          } 
          else {
            $Image = "";
          }

      }      
  return $Image;
}

以下の機能を使用します。

  1. 画像は破損/RAW 形式で保存され、スループットなしでより多くの遅延が発生しました file_put_contents($dstfile, $return);

  2. 画像は、適切なスループットでより多くのレイテンシーで完全に保存されました copy(str_replace(" ", "%20", $srcfile), $dstfile);

  3. 画像はテキスト形式で保存され、スループットが不適切で待ち時間が長くなりました @copy($srcfile, $dstfile); $content = file_get_contents($srcfile); $fp = fopen($dstfile , "w+"); fwrite($fp, $content); $Image = 'catalog/prod/'.$filepath['basename']; fclose($fp); curl_close($process);

  4. copy(urlencode($srcfile), $dstfile);

    結果:

    警告: copy(https%3A%2F%2Fwww.DomainNameServer.in%2Fimage%2Fcatalog%2Fpimages%2FSKU093126+%281%29.jpg): ストリームを開けませんでした: /var/www/html/opencart3にそのようなファイルまたはディレクトリはありません/admin/model/account/apisync.php264

  5. copy(urldecode($srcfile), $dstfile);

    結果:

    警告: copy( https://www.DomainNameServer.in/image/catalog/pimages/SKU093126 (1).jpg): ストリームを開くことができませんでした: HTTP 要求が失敗しました! /var/www/html/opencart3/admin/model/account/apisync.php264行目

  6. copy(str_replace('_','%20',$srcfile), $dstfile);

    結果:

    警告:copy( https://www.DomainNameServer.in/image/catalog/pimages/SKU093126 (1).jpg): ストリームを開くことができませんでした: HTTP 要求が失敗しました! /var/www/html/opencart3/admin/model/account/apisync.php265行 目

  7. copy(str_replace('%20',' ',$srcfile), $dstfile);または copy(str_replace('%20','_',$srcfile), $dstfile);または copy(str_replace('%20','',$srcfile), $dstfile);

    結果:

    警告: copy( https://www.DomainNameServer.in/image/catalog/pimages/SKU093126 (1).jpg): ストリームを開くことができませんでした: HTTP 要求が失敗しました! /var/www/html/opencart3/admin/model/account/apisync.php265行 目


API 機能を構築するとき、10,000 製品のうち 1091 製品のみがデータベースに保存され、残りの 8909 製品は実行に 7 ~ 10 時間かかりました。実行時間制限を無限に設定しているため。10時間後に確認したところ、すべての商品が無事保存されていました。

合計所要時間は、no に正比例します。スペースを含む画像ファイル名の

いいえをエクスポートします。スペースを含む画像ファイル名により商品の表記が異なります。画像ファイル名にスペースが含まれる 3 つの製品のデバッグを行ったときは、addSubImages()実行に 1 秒もかからない関数なしで完了するのに 20 分かかりました。

このシナリオを回避するためのソリューションに他のアプローチがある場合は?

4

2 に答える 2