[英]Issue with filename containing spaces
OpenCart 框架版本 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;
}
具有以下功能:
圖像以 Corrupted/RAW 格式保存,沒有吞吐量file_put_contents($dstfile, $return);
通過適當的吞吐量copy(str_replace(" ", "%20", $srcfile), $dstfile);
圖像以文本格式保存,延遲更多,吞吐量不正確@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);
@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);
copy(urlencode($srcfile), $dstfile);
結果:
警告:復制(https%3A%2F%2Fwww.DomainNameServer.in%2Fimage%2Fcatalog%2Fpimages%2FSKU093126+%281%29.jpg):無法打開流: /var/www/html/opencart3中沒有這樣的文件或目錄/admin/model/account/apisync.php第264行
copy(urldecode($srcfile), $dstfile);
結果:
警告:復制(https://www.DomainNameServer.in/image/catalog/pimages/SKU093126 (1).jpg):無法打開流:HTTP請求失敗! 在第264行的/var/www/html/opencart3/admin/model/account/apisync.php
copy(str_replace('_','%20',$srcfile), $dstfile);
結果:
警告:copy(https://www.DomainNameServer.in/image/catalog/pimages/SKU093126 (1).jpg): 無法打開流:HTTP 請求失敗! 在第265行的/var/www/html/opencart3/admin/model/account/apisync.php
copy(str_replace('%20',' ',$srcfile), $dstfile);
或copy(str_replace('%20','_',$srcfile), $dstfile);
或copy(str_replace('%20','',$srcfile), $dstfile);
結果:
警告:復制(https://www.DomainNameServer.in/image/catalog/pimages/SKU093126 (1).jpg):無法打開流:HTTP請求失敗! 在第265行的/var/www/html/opencart3/admin/model/account/apisync.php
在構建 API 功能時,在 10,000 種產品中,只有 1091 種產品保存到數據庫中,其余 8909 種產品需要 7 到 10 個小時才能執行。 由於我已將執行時間限制設置為無限。 當我在10個小時后檢查時,所有產品都成功保存。
總時間與否成正比。 包含空格的圖像文件名
出口編號產品的名稱根據包含空格的圖像文件名而有所不同。 當我調試三個帶有空格的圖像文件名的產品時,在沒有addSubImages()
函數的情況下,它需要 20 分鍾才能完成,它甚至沒有執行一秒鍾
如果有任何其他解決方案可以解決這種情況?
使用此代碼 不要使用空格
copy(str_replace("%20", "", $srcfile), $dstfile);
OR
copy(str_replace("%20", "_", $srcfile), $dstfile);
修改 Prasannas 答案這對我有用:
$string_without_space = str_replace(" ", "_", $string_with_space);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.