diff --git a/README.md b/README.md
index df5c38a..5450d6b 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,24 @@
# mysqlimagereplacer
-mySQL image downloader / replacer
+
+mySQL image downloader / replacer wizard
+
+v.0.1 alpha
+
+DWTWL license https://soundragon.su/license/license.html
+
+This is alpha version written for specific needs. If you want complete and expanded version of this script, then making the request.
+
+
+
+!MAKE BACKUP OF YOUR SQL-TABLE BEFORE YOU TRY THIS SCRIPT!
+
+requirement: php-xml module
+
+Using:
+
+1. Check php-xml is installed.
+2. Copy files to new subdirectory of your web-server, for example:
+/mysqlim/
+3. Add write privilegies for this directory.
+4. Login to wizard by web-browser:
+http://yourserver.com/mysqlim/
diff --git a/exec.log b/exec.log
new file mode 100644
index 0000000..e69de29
diff --git a/exec.php b/exec.php
new file mode 100644
index 0000000..b2a0581
--- /dev/null
+++ b/exec.php
@@ -0,0 +1,146 @@
+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 = '';
+ $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","
\n";
+ if ($fixbroken or $fixundownload) echo $deletedurls, " tags was deleted
\n";
+
+?>
\ No newline at end of file
diff --git a/index.php b/index.php
new file mode 100644
index 0000000..2e65d1d
--- /dev/null
+++ b/index.php
@@ -0,0 +1,337 @@
+\n";
+ $_SESSION["subdir"]="images";
+ echo "
\n";
+ if ($_SESSION["error"]=="dbconnection") echo " Error: ", mysqli_connect_error(),"
\n";
+ if ($_SESSION["error"]=="dbconnectionname") echo " Error: enter database name.
\n";
+ }
+// Second wizard-page
+ if ($_SESSION["step"]==1) {
+ echo "STEP 2: entries and directories:
\n";
+ echo "\n";
+ if ($_SESSION["error"]) echo $_SESSION["error"],"
\n";
+ }
+// Third wizard-page
+ if ($_SESSION["step"]==2) {
+ echo "STEP 3: check data:
\n";
+ $postnumber=0;
+ $totalimagenumber=0;
+ $_SESSION["correctimagenumber"]=0;
+ $_SESSION["alreadyimagenumber"]=0;
+ $_SESSION["brokenimagenumber"]=0;
+ $dbconnection=mysqli_connect($_SESSION["dbhost"],$_SESSION["dbuser"],$_SESSION["dbpass"],$_SESSION["dbname"]);
+ mysqli_set_charset($dbconnection,'utf8');
+ $resulttable=mysqli_query($dbconnection,"SELECT * FROM ".$_SESSION["dbtable"]);
+ $resultrows=mysqli_num_rows($resulttable);
+ $_SESSION["imgsrcs"]=array();
+// Checking table
+ while($row=mysqli_fetch_assoc($resulttable)){
+ $contentpost=new DOMDocument();
+ $contentpost->loadHTML($row[$_SESSION["dbcolumn"]]);
+ $imageTags=$contentpost->getElementsByTagName('img');
+ $imagenumberinpost=0;
+ foreach($imageTags as $tag) {
+ $imagenumberinpost++;
+ $totalimagenumber++;
+ $_SESSION["imgsrcs"][$postnumber][$imagenumberinpost]=$tag->getAttribute('src');
+ $testurl=parse_url($_SESSION["imgsrcs"][$postnumber][$imagenumberinpost]);
+ if ((!empty($testurl['host'])&&!empty($testurl['path']))&&(($testurl['scheme']=="http")||($testurl ['scheme']=="https"))&&(!($testurl['host']==$_SERVER['SERVER_NAME']))) $_SESSION["correctimagenumber"]++;
+ else if ($testurl['host']==$_SERVER['SERVER_NAME']) $_SESSION["alreadyimagenumber"]++;
+ else $_SESSION["brokenimagenumber"]++;
+ }
+ $postnumber++;
+ }
+ echo "\n";
+ if ($_SESSION["error"]) echo $_SESSION["error"],"
\n";
+ if ($_SESSION["correctimagenumber"]<1) echo "you dont have any external images to download or fix
\n";
+ if ($_SESSION["details"]=="step2") {
+ echo "green links will be try to downloaded, yellow (already downloaded) and red (broken) - not:
\n";
+ foreach ($_SESSION["imgsrcs"] as $postnum=>$postimgs) {
+ echo ($postnum+1),":
\n";
+ foreach ($postimgs as $imgs) {
+ $testurl=parse_url($imgs);
+ if ((!empty($testurl['host'])&&!empty($testurl['path']))&&(($testurl['scheme']=="http")||($testurl ['scheme']=="https"))&&(!($testurl['host']==$_SERVER['SERVER_NAME']))) echo " ";
+ else if ($testurl['host']==$_SERVER['SERVER_NAME']) echo " ";
+ else echo " ";
+ echo $imgs,"
\n";
+ }
+ echo "
\n";
+ }
+ }
+ }
+// Approve page
+ if ($_SESSION["step"]==3) {
+ echo "STEP 4: approve processing:
\n";
+ echo "\n";
+ }
+// Start page
+ if ($_SESSION["step"]==4) {
+ $_SESSION["error"]="";
+ echo "RESULT:
\n";
+ if ($_SESSION["subdir"]) {
+ mkdir($_SESSION["subdir"]);
+ if (!chdir($_SESSION["subdir"])) $_SESSION["error"]="error to apperate with new directory";
+ } else {
+ if (mkdir ("testimuploaddir")) rmdir("testimuploaddir");
+ else $_SESSION["error"]="error to apperate with directory, check privilegies";
+ }
+ if ($_SESSION["error"]) echo $_SESSION["error"]."
\n";
+ else {
+ chdir(__DIR__);
+ $csvsessiondata[]=$_SESSION["dbhost"];
+ $csvsessiondata[]=$_SESSION["dbuser"];
+ $csvsessiondata[]=$_SESSION["dbpass"];
+ $csvsessiondata[]=$_SESSION["dbname"];
+ $csvsessiondata[]=$_SESSION["dbtable"];
+ $csvsessiondata[]=$_SESSION["dbcolumn"];
+ $csvsessiondata[]=$_SERVER['SERVER_NAME'];
+ $csvsessiondata[]=$_SESSION["fixbroken"];
+ $csvsessiondata[]=$_SESSION["dirname"];
+ $csvsessiondata[]=$_SESSION["subdir"];
+ $csvsessiondata[]=$_SESSION["downloadtype"];
+ $csvsessiondata[]=$_SESSION["htmlprefix"];
+ $csvsessiondata[]=$_SESSION["fixalready"];
+ $csvsessiondata[]=$_SESSION["fixundownload"];
+ $csvsessiondata[]=$_SESSION["correctimagenumber"];
+ $fhandle=fopen("indata.csv","w");
+ fputcsv($fhandle,$csvsessiondata);
+ fclose($fhandle);
+ exec("php -q exec.php < /dev/null > exec.log &");
+ echo "Process started, it's take some time. Please press Details for check status
\n";
+ }
+ echo "\n";
+ }
+// Result page
+if ($_SESSION["step"]==5) {
+ echo "RESULT:
\n";
+ if (file_exists("outdata.csv"))
+ {
+ $fhandle=fopen("outdata.csv","r");
+ $outdatacsv=fgetcsv($fhandle, 1024, ",");
+ fclose($fhandle);
+ $rawsedit=$outdatacsv[0];
+ $updatedurls=$outdatacsv[1];
+ $failedtoupdate=$outdatacsv[2];
+ $deletedurls=$outdatacsv[3];
+ echo "raws edited: ",$rawsedit,", urldecode downloaded: ",$updatedurls,", failed to download: ",$failedtoupdate,", deleted tags: ",$deletedurls,"
\n";
+ } else {
+ $logexec=file_get_contents("exec.log");
+ echo $logexec;
+ }
+ echo "\n";
+ }
+}
+ $_SESSION["step"]=0;
+ $_SESSION["error"]="";
+ $_SESSION["details"]="";
+
+ if ($_POST["next0"]) {
+ $_SESSION["dbhost"]=$_POST["dbhost"];
+ $_SESSION["dbuser"]=$_POST["dbuser"];
+ $_SESSION["dbpass"]=$_POST["dbpass"];
+ $_SESSION["dbname"]=$_POST["dbname"];
+ $_SESSION["template"]=$_POST["dbtype"];
+ $dbconnection=mysqli_connect($_SESSION["dbhost"],$_SESSION["dbuser"],$_SESSION["dbpass"],$_SESSION["dbname"]);
+ $_SESSION["step"]=1;
+ if (!$dbconnection) {
+ $_SESSION["step"]=0;
+ $_SESSION["error"]="dbconnection";
+ } if ($_SESSION["template"]=="Wordpress") {
+ $_SESSION["dbtable"]="wp_posts";
+ $_SESSION["dbcolumn"]="post_content";
+ $_SESSION["dirname"]="wp-content/uploads";
+ } if ($_SESSION["template"]=="Joomla") {
+ $_SESSION["dbtable"]="prefix_content";
+ $_SESSION["dbcolumn"]="fulltext";
+ $_SESSION["dirname"]="images/stories";
+ } if ($_SESSION["template"]=="Drupal") {
+ $_SESSION["dbtable"]="field_data_body";
+ $_SESSION["dbcolumn"]="body_value";
+ $_SESSION["dirname"]="sites/default/files";
+ } if (!$_POST["dbname"]) {
+ $_SESSION["step"]=0;
+ $_SESSION["error"]="dbconnectionname";
+ }
+ }
+
+ if ($_POST["prev1"]) {
+ $_SESSION["dbtable"]=$_POST["dbtable"];
+ $_SESSION["dbcolumn"]=$_POST["dbcolumn"];
+ $_SESSION["dirname"]=$_POST["dirname"];
+ $_SESSION["step"]=0;
+ } if ($_POST["next1"]) {
+ $_SESSION["dbtable"]=$_POST["dbtable"];
+ $_SESSION["dbcolumn"]=$_POST["dbcolumn"];
+ $_SESSION["dirname"]=$_POST["dirname"];
+ $dbconnection=mysqli_connect($_SESSION["dbhost"],$_SESSION["dbuser"],$_SESSION["dbpass"],$_SESSION["dbname"]);
+ $columns=mysqli_query($dbconnection, "SHOW COLUMNS FROM ".$_SESSION["dbtable"]);
+ if (!$columns) {
+ $_SESSION["error"]=mysqli_error();
+ $_SESSION["step"]=1;
+ }
+ if (mysqli_num_rows($columns)>0) {
+ $_SESSION["error"]="Column not found";
+ while ($row = mysqli_fetch_assoc($columns)) if ($row[Field]==$_SESSION["dbcolumn"]) $_SESSION["error"]="";
+ } else $_SESSION["error"]="Table is empty or not exists";
+ $uploadsdir=chdir("../".$_SESSION["dirname"]);
+ if ($uploadsdir) { if (!is_writeable(getcwd())) $_SESSION["error"]="Cant write to directory, check previlegies"; }
+ else $_SESSION["error"]="Cant open directory";
+ if (!$_SESSION["error"]) $_SESSION["step"]=2;
+ else $_SESSION["step"]=1;
+ }
+
+ if ($_POST["prev2"]) {
+ $_SESSION["step"]=1;
+ $_SESSION["subdir"]=$_POST["subdir"];
+ } if ($_POST["deta2"]) {
+ $_SESSION["details"]="step2";
+ $_SESSION["step"]=2;
+ $_SESSION["subdir"]=$_POST["subdir"];
+ $_SESSION["htmlprefix"]=$_POST["htmlprefix"];
+ $_SESSION["downloadtype"]=$_POST["dwnldtype"];
+ $_SESSION["fixbroken"]=$_POST["fixbroken"];
+ $_SESSION["fixundownload"]=$_POST["fixundownload"];
+ $_SESSION["fixalready"]=$_POST["fixalready"];
+ $uploadsdir=chdir("../".$_SESSION["dirname"]);
+ } if ($_POST["next2"]) {
+ $_SESSION["step"]=3;
+ $_SESSION["subdir"]=$_POST["subdir"];
+ $_SESSION["htmlprefix"]=$_POST["htmlprefix"];
+ $_SESSION["downloadtype"]=$_POST["dwnldtype"];
+ $_SESSION["fixbroken"]=$_POST["fixbroken"];
+ $_SESSION["fixundownload"]=$_POST["fixundownload"];
+ $_SESSION["fixalready"]=$_POST["fixalready"];
+ $uploadsdir=chdir("../".$_SESSION["dirname"]);
+ if ($_POST["fixbroken"]) { if (($_SESSION["correctimagenumber"]<1)&($_SESSION["brokenimagenumber"]<1)) $_SESSION["step"]=2; }
+ else if ($_SESSION["correctimagenumber"]<1) $_SESSION["step"]=2;
+ }
+
+ if ($_POST["prev3"]) {
+ $_SESSION["step"]=2;
+ $uploadsdir=chdir("../".$_SESSION["dirname"]);
+ } if ($_POST["next3"]) {
+ $_SESSION["step"]=4;
+ $uploadsdir=chdir("../".$_SESSION["dirname"]);
+ }
+
+ if ($_POST["deta4"]) {
+ $_SESSION["step"]=5;
+}
+
+ if ($_POST["deta5"]) {
+ $_SESSION["step"]=5;
+ }
+
+?>
+
+
+ image replacer
+
+
+
+
+
+
\ No newline at end of file