2018-06-19修改
對ipos_sptpk這個表添加一個字段,bj,用來標記圖片是否下載成功(0爲沒有圖片,1爲有圖片)
添加的時候自動添加0,圖片下載成功更新爲1
前景:由於不使用ERP商品目錄來上傳圖片,導致沒有生成bse格式的圖片,需要手動去修改生成,然後IPOS下載圖片。
部份代碼爲網上找的
爲了解決這個問題使用自動化腳本:
本次共分2個步驟:
1、添加ipos_sptpk 這個表的內容,把商品目錄裏面的商品條碼插入到ipos_sptpk中,以下文件設置凌晨2點自動執行
<?php
//自動生成ipos_sptpk的商品名稱和圖片名稱
$db_host="192.168.1.xxx"; //MYSQL服務器名
$db_user="root"; //MYSQL用戶名
$db_pass="xxxx"; //MYSQL用戶對應密碼
$db_name="xxxx"; //要操作的數據庫
$link=mysql_connect($db_host,$db_user,$db_pass)or die("不能連接到服務器".mysql_error());
mysql_select_db($db_name,$link);
mysql_query("SET NAMES 'GBK'",$link);
$time=date("Y-m-d h:m:s");
$sql_cx="select pic_dm from ipos_sptpk order by id desc"; //查詢最大的pic_dm
$result=mysql_query($sql_cx,$link);
$row=mysql_fetch_array($result);
$pic_dm=$row['pic_dm']+1;
$sql_sptm="select spdm from com_base_shangpin where spdm not in (select spdm from ipos_sptpk)"; //查詢沒有生成sptpk的商品代碼
$result_sptm=mysql_query($sql_sptm,$link);
while ($row_sptm=mysql_fetch_array($result_sptm)){
$sql_spid="select id from com_base_shangpin where spdm='{$row_sptm['spdm']}'";
$result_spid=mysql_query($sql_spid,$link);
$row_spid=mysql_fetch_array($result_spid);
$spid=$row_spid['id'];
$sql_insert="insert into ipos_sptpk(sp_id,spdm,pic_name,pic_dm,lastchanged,bj) values ('{$spid}','{$row_sptm['spdm']}','{$row_sptm['spdm']}','{$pic_dm}','{$time}',0)"; //插入沒有生成圖片的商品
$result_insert=mysql_query($sql_insert,$link);
$pic_dm=$pic_dm+1;
}
?>
2、自動處理圖片,設置3點自動執行
1)、從ipos_sptpk取當天下載的條碼,並下載到本地服務器上
$link=mysql_connect($db_host,$db_user,$db_pass)or die("不能連接到服務器".mysql_error());
mysql_select_db($db_name,$link);
mysql_query("SET NAMES 'GBK'",$link);
$end_time=date('Y-m-d',strtotime("+1 day"));
$start_time= date('Y-m-d',strtotime("-1 week"));
$dir="../ipos_pic/zdwjj/"; //中轉目錄,用完刪除裏面的文件,等待下次使用
$dir2="../ipos_pic/big/"; //IPOS大圖目錄
$dir3="../ipos_pic/small/";
$sql_cx="select spdm from ipos_sptpk where lastchanged BETWEEN '{$start_time}' and '{$end_time}' and bj=0";
$result=mysql_query($sql_cx,$link);
while ($row=mysql_fetch_array($result)){
$spdm=$row['spdm'];
$url="http://192.168.1.XXX/".$spdm.".jpg";
if(check_file_exists($url)){
copy($url,$dir.$spdm.".jpg");
copy($url,$dir2.$spdm.".jpg");
$sql_update="update ipos_sptpk set bj=1 where spdm='{$spdm}'";
mysql_query($sql_update,$link);
}else{
$url="http://192.168.1.XXX/ipos/web/ipos_pic/404_big.jpg"; //此處直接下載404圖片
$url2="http://192.168.1.XXX/ipos/web/ipos_pic/404_small.jpg"; //下載已經處理好的404圖片,所有用同一張就行了
copy($url,$dir2.$spdm.".jpg");
copy($url2,$dir3.$spdm.".jpg");
}
}
require('slt.php'); //調用生成縮略圖文件
require('del.php'); //調用刪除中轉目錄下的文件
function check_file_exists($file){ //判斷遠程遠程 是否存在函數
// 遠程文件
if(strtolower(substr($file, 0, 4))=='http'){
$header = get_headers($file, true);
return isset($header[0]) && (strpos($header[0], '200') || strpos($header[0], '304'));
// 本地文件
}else{
return file_exists($file);
}
}
2)slt.php 此爲生成縮略圖
<?php
//處理所有文件,請設置爲 '.'
error_reporting(0);
$only = '.';
//如果不希望覆蓋已經存在的圖片 將此行設爲0;
$over = 1;
//是否處理GIF圖,0爲不處理
$regif = 0;
require('funs.php');
$file = array();
$dir = "../ipos_pic/zdwjj/";
$newdir = "../ipos_pic/small/";
$w = intval(50);
$h = intval(50);
$d = @dir($dir) or die('目錄不存在!');
while ($a=$d->read()){
$type = substr(strrchr($a,"."),1);
if($a!=='.' && $a!=='..'){
if(is_dir($dir.'/'.$a)){
$zdir[]=$a;
} elseif($type=='jpg' || $type=='gif' || $type=='bmp' || $type=='png') {
if(strstr($a, $only)){
$file[]=$dir.'/'.$a;
}
}
}
}
$rand = rand(100,999);
$img = new image($dir, $newdir);
$img->over = $over;
$img->regif= $regif;
foreach ($file as $key){
$src = $img->reImg($key, $w, $h);
}
?>
2)funs.php
<?php
function mkdirs($l1, $l2 = 0777){
if(!is_dir($l1)){
mkdirs(dirname($l1), $l2);
return @mkdir($l1, $l2);
}
return true;
}
function savefile($l1, $l2=''){
if(function_exists(file_put_contents)){
file_put_contents($l1, $l2);
} else{
$fp = @fopen($l1, 'wb');
@fwrite($fp, $l2);
fclose($fp);
}
}
function getfix($l1){
return end(explode('.', $l1));
}
function checkfix($l1, $l2){
if(!is_array($l2)){
$l2 = explode(',', str_replace(' ', '', $l2));
}
return in_array($l1, $l2) ? 1 : 0;
}
class image{
var $src;
var $newsrc;
var $allowtype = array('.jpg','.gif','.png','.jpeg');
var $regif = 0;
var $keep = 0;
var $over = 0;
var $dir;
var $newdir;
function __construct($l1=null, $l2=null){
$this->dir = $l1 ? $l1 : "./images/temp";
$this->newdir = $l2 ? $l2 : "./images/s";
}
function image($l1=null, $l2=null){
$this->__construct($l1, $l2);
}
function reName($src){
$l1 = substr(md5($src),10,10).strrchr($src,".");
$l1 = $this->w.'_'.$this->h.'_'.$l1;
return $this->newdir.'/'.$l1;
}
function Mini($src,$w,$h, $q=80){
$this->src = $src;
$this->w = $w;
$this->h = $h;
if(strrchr($src, ".") == ".gif" && $this->regif == 0){
return $this->src;
}
if(!$this->keep){
$newsrc = $this->reName($src);
} else {
$src = str_replace('\\', '/', $src);
$newsrc = $this->newdir.strrchr($src, "/");
}
if(file_exists($newsrc) && $this->over == 0){
return $newsrc;
}
if(strstr($src, "http://") && !strstr($src, $_SERVER['HTTP_HOST'])){
$src = $this->getimg($src);
}
$arr = getimagesize($src);
$ow = $arr[0];
$oh = $arr[1];
$ot = $arr[2];
switch($ot){
case 1:
$im = imagecreatefromgif($src);
break;
case 2:
$im = imagecreatefromjpeg($src);
break;
case 3:
$im = imagecreatefrompng($src);
break;
default:
return 0;
}
$nim = imagecreatetruecolor($w,$h);
$k1 = round($h/$w,2);
$k2 = round($oh/$ow,2);
if ($k1<$k2){
$oow = $ow;
$ooh = round($ow*$k1);
$sw = 0;
$sh = ($oh-$ooh)/2;
}
else {
$oow = $oh/$k1;
$ooh = $oh;
$sw = ($ow-$oow)/2;
$sh = 0;
}
if(function_exists(imagecopyresampled)){
imagecopyresampled($nim,$im,0,0,$sw,$sh,$w,$h,$oow,$ooh);
}
else {
imagecopyresized($nim,$im,0,0,$sw,$sh,$w,$h,$oow,$ooh);
}
if(!is_dir($this->newdir)){
@mkdir($this->newdir);
}
switch($ot){
case 1:
$rs = imagegif($nim,$newsrc);
break;
case 2:
$rs = imagejpeg($nim,$newsrc,$q);
break;
case 3:
$rs = imagepng($nim,$newsrc);
break;
default:
return 0;
}
return $newsrc;
}
function getimg($l1){
$l2 = $this->dir.'/'.substr(md5($l1),10,10).strrchr($l1,".");
if(file_exists($l2)){
return $l2;
}
$img = file_get_contents($l1);
if($img){
if(!is_dir($this->dir)){
@mkdir($this->dir);
}
savefile($l2, $img);
return $l2;
}
}
function reImg($src, $w, $h, $q=80){
$this->keep = 1;
return $this->Mini($src, $w, $h, $q);
}
}
3)del.php
刪除中轉目錄中的文件
<?php
function delDirAndFile( $dirName )
{
if ( $handle = opendir( "$dirName" ) ) {
while ( false !== ( $item = readdir( $handle ) ) ) {
if ( $item != "." && $item != ".." ) {
if ( is_dir( "$dirName/$item" ) ) {
delDirAndFile( "$dirName/$item" );
} else {
if( unlink( "$dirName/$item" ) );
}
}
}
closedir( $handle );
}
}
delDirAndFile('../ipos_pic/zdwjj');
?>