146 lines
6.6 KiB
PHP
146 lines
6.6 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* mySQL image replacer - https://github.com/zlaxy/mysqlimagereplacer
|
||
|
* v.0.1 alpha - uder DWTWL license https://soundragon.su/license/license.html
|
||
|
* exec script
|
||
|
*
|
||
|
* !MAKE BACKUP OF YOUR SQL-TABLE BEFORE YOU TRY THIS SCRIPT!
|
||
|
*/
|
||
|
ignore_user_abort(true);
|
||
|
ini_set('max_execution_time', '6000');
|
||
|
ini_set('max_input_time', '6000');
|
||
|
|
||
|
function SaveStatus ($status,$raws,$updated,$failed,$deleted,$execdir) {
|
||
|
$csvstatusndata[]=$raws;
|
||
|
$csvstatusndata[]=$updated;
|
||
|
$csvstatusndata[]=$failed;
|
||
|
$csvstatusndata[]=$deleted;
|
||
|
if ($status=="started") {
|
||
|
$fhandle=fopen($execdir."/outdata.csv","w");
|
||
|
fputcsv($fhandle,$csvstatusndata);
|
||
|
fclose($fhandle);
|
||
|
} else
|
||
|
if ($status=="finished") unlink ($execdir."/outdata.csv");
|
||
|
}
|
||
|
|
||
|
function DownloadFopen($URL) {
|
||
|
if (file_exists(rawurldecode(pathinfo($URL)['basename']))) {
|
||
|
$fileprefix=mt_rand(1000000,9999999);
|
||
|
file_put_contents($fileprefix.rawurldecode(pathinfo($URL)['basename']), file_get_contents($URL));
|
||
|
if (md5_file($fileprefix.rawurldecode(pathinfo($URL)['basename']))==md5_file(rawurldecode(pathinfo($URL)['basename']))) {
|
||
|
unlink ($fileprefix.rawurldecode(pathinfo($URL)['basename']));
|
||
|
$result=pathinfo($URL)['basename'];
|
||
|
} else {
|
||
|
if (exif_imagetype($fileprefix.rawurldecode(pathinfo($URL)['basename']))>0) $result=$fileprefix.pathinfo($URL)['basename'];
|
||
|
else {
|
||
|
unlink ($fileprefix.rawurldecode(pathinfo($URL)['basename']));
|
||
|
$result=false;
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
file_put_contents(rawurldecode(pathinfo($URL)['basename']), file_get_contents($URL));
|
||
|
if (exif_imagetype(rawurldecode(pathinfo($URL)['basename']))>0) $result=pathinfo($URL)['basename'];
|
||
|
else {
|
||
|
unlink (rawurldecode(pathinfo($URL)['basename']));
|
||
|
$result=false;
|
||
|
}
|
||
|
}
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
$execdir=__DIR__;
|
||
|
$fhandle=fopen("indata.csv","r") or $logmessage="emptyindata";
|
||
|
$indatacsv=fgetcsv($fhandle, 1024, ",");
|
||
|
fclose($fhandle);
|
||
|
$dbhost=$indatacsv[0];
|
||
|
$dbuser=$indatacsv[1];
|
||
|
$dbpass=$indatacsv[2];
|
||
|
$dbname=$indatacsv[3];
|
||
|
$dbtable=$indatacsv[4];
|
||
|
$dbcolumn=$indatacsv[5];
|
||
|
$servername=$indatacsv[6];
|
||
|
$fixbroken=$indatacsv[7];
|
||
|
$dirname=$indatacsv[8];
|
||
|
$subdir=$indatacsv[9];
|
||
|
$downloadtype=$indatacsv[10];
|
||
|
$htmlprefix=$indatacsv[11];
|
||
|
$fixalready=$indatacsv[12];
|
||
|
$fixundownload=$indatacsv[13];
|
||
|
$correctimagenumber=$indatacsv[14];
|
||
|
unlink ("indata.csv");
|
||
|
|
||
|
if ($logmessage=="emptyindata") echo "Can't read data file, please check write pirivlegies for ",$execdir," directory";
|
||
|
chdir("../".$dirname);
|
||
|
if ($subdir) chdir ($subdir);
|
||
|
$dbconnection=mysqli_connect($dbhost,$dbuser,$dbpass,$dbname);
|
||
|
mysqli_set_charset($dbconnection,'utf8');
|
||
|
$resulttable=mysqli_query($dbconnection,"SELECT * FROM ".$dbtable);
|
||
|
$totalstatus="started";
|
||
|
$updatedurls=0;
|
||
|
$failedtoupdate=0;
|
||
|
$deletedurls=0;
|
||
|
$rawsedit=0;
|
||
|
SaveStatus ($totalstatus,$rawsedit,$updatedurls,$failedtoupdate,$deletedurls,$execdir);
|
||
|
while($row=mysqli_fetch_assoc($resulttable)){
|
||
|
$originalcontent=$row[$dbcolumn];
|
||
|
$newcontent=$originalcontent;
|
||
|
if ($fixbroken) {
|
||
|
$contentpost=new DOMDocument();
|
||
|
$xmlEncodding = '<?xml version="1.0" encoding="UTF-8"?>';
|
||
|
$contentpost->loadHTML($xmlEncodding.$originalcontent, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
|
||
|
$imageTags=$contentpost->getElementsByTagName('img');
|
||
|
for ($i = $imageTags->length; --$i >= 0; ) { // http://php.net/manual/class.domnodelist.php#83390
|
||
|
$tag = $imageTags->item($i);
|
||
|
$imgsrctag=$tag->getAttribute('src');
|
||
|
$parsedimgsrctag=parse_url($imgsrctag);
|
||
|
if (!((!empty($parsedimgsrctag['host'])&&!empty($parsedimgsrctag['path']))&&(($parsedimgsrctag['scheme']=="http")||($parsedimgsrctag ['scheme']=="https")))) {
|
||
|
$tag->parentNode->removeChild($tag);
|
||
|
$deletedurls++;
|
||
|
}
|
||
|
}
|
||
|
$newcontent=str_replace($xmlEncodding,"",$contentpost->saveHTML());
|
||
|
}
|
||
|
if ($correctimagenumber>0) {
|
||
|
$contentpost=new DOMDocument();
|
||
|
$contentpost->loadHTML($newcontent);
|
||
|
$imageTags=$contentpost->getElementsByTagName('img');
|
||
|
for ($i = $imageTags->length; --$i >= 0; ) { // http://php.net/manual/class.domnodelist.php#83390
|
||
|
$tag = $imageTags->item($i);
|
||
|
$imgsrctag=$tag->getAttribute('src');
|
||
|
$parsedimgsrctag=parse_url($imgsrctag);
|
||
|
if ((!empty($parsedimgsrctag['host'])&&!empty($parsedimgsrctag['path']))&&(($parsedimgsrctag['scheme']=="http")||($parsedimgsrctag ['scheme']=="https"))&&(!($parsedimgsrctag['host']==$servername))) {
|
||
|
$newimgsrc=DownloadFopen($imgsrctag);
|
||
|
if ($newimgsrc) {
|
||
|
if ($htmlprefix=="http") {
|
||
|
$srcbase="http://".$servername."/".$dirname."/";
|
||
|
} else if ($htmlprefix=="https") {
|
||
|
$srcbase="https://".$servername."/".$dirname."/";
|
||
|
} else {
|
||
|
$srcbase="/".$dirname."/";
|
||
|
}
|
||
|
if ($subdir) $srcbase=$srcbase.rawurlencode($subdir)."/";
|
||
|
$newimgsrc=$srcbase.$newimgsrc;
|
||
|
$newcontent=str_replace($imgsrctag,$newimgsrc,$newcontent);
|
||
|
unset($newimgsrc);
|
||
|
$updatedurls++;
|
||
|
SaveStatus ($totalstatus,$rawsedit,$updatedurls,$failedtoupdate,$deletedurls,$execdir);
|
||
|
} else if ($fixundownload==true) {
|
||
|
$tag->parentNode->removeChild($tag);
|
||
|
$deletedurls++;
|
||
|
SaveStatus ($totalstatus,$rawsedit,$updatedurls,$failedtoupdate,$deletedurls,$execdir);
|
||
|
} else $failedtoupdate++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
$stmt = mysqli_prepare($dbconnection, "UPDATE `".$dbtable."` SET `".$dbcolumn."` = ? WHERE `".$dbtable."`.`".$dbcolumn."`=?");
|
||
|
mysqli_stmt_bind_param($stmt, 'ss', $newcontent, $originalcontent);
|
||
|
mysqli_stmt_execute($stmt);
|
||
|
$rawsedit++;
|
||
|
SaveStatus ($totalstatus,$rawsedit,$updatedurls,$failedtoupdate,$deletedurls,$execdir);
|
||
|
}
|
||
|
$totalstatus="finished";
|
||
|
SaveStatus ($totalstatus,$rawsedit,$updatedurls,$failedtoupdate,$deletedurls,$execdir);
|
||
|
echo $updatedurls," urls was downloaded and updated, ",$failedtoupdate," urls was failed to update","<br>\n";
|
||
|
if ($fixbroken or $fixundownload) echo $deletedurls, " tags was deleted<br>\n";
|
||
|
|
||
|
?>
|