2016-04-25 4 views
-1

Ich verwendete ein altes Content-Management-System, das CKEditor mit CKFinder verwendet, mit dem Sie Bilder auf den Server hochladen können. Allerdings wird die vollständige URL in das Inhaltsfeld eingefügt und später gespeichert die Datenbank.PHP Bildspeicherort ändern

Ich habe vor kurzem mein Content-Management-System neu aufgebaut und wieder mit CKEditor mit CKFinder. Ich bin gerade dabei, die Datenbank zu verschieben und die Daten neu anzuordnen. Aber ich habe bemerkt, dass die URL für diese Bilder falsch wäre.

Meine Frage ist also, ist es möglich, die URL zu suchen und zu ersetzen, und könnte mehrmals pro String sein? Es gibt auch einen zufälligen Hash-Schlüssel in der Mitte, wobei ich mir nicht sicher bin, wie ich mich fortbewegen soll, weshalb ich diese Frage stelle.

Die URL wäre (ungeschnitten)

http://www.oldwebsite.com/aknsnd8123nakndkna/upload/images/image.jpg 

Ich möchte die URL extrahieren und den Pfad zu ändern:

http://www.newwebsite.com/images/uploaded/image.jpg 

ich bin sicher nicht, wie ich den Start bekommen würde und Ende, während der mittlere Teil übersprungen wird. Oder ist es möglich, am Ende einfach das image.jpg zu bekommen, und ich werde am Anfang den neuen Weg einschlagen.

Ich habe bisher nur 2 Zeilen Code, aber zu berücksichtigen, dass es HTML ist.

$content = '<h1>'.$page['Page_Title'].'</h1>'; 
$content .= $page['Page_Content']; 

Dies ist, was $page['Page_Content'] kehrt:

<p style="text-align: center;"> 
    <img alt="" src="http://www.oldwebsite.com/aknsnd8123nakndkna/upload/images/image.jpg" style="width: 700px; height: 493px;" /> 
</p> 
<p style="text-align: center;"> 
    The Sports Stadium is an impressive addition to any event, catering for several sports keeping children entertained for hours. 
</p> 
+1

Sie haben nicht viele Informationen zur Verfügung gestellt ... Möchten Sie ein Migrationsskript schreiben, um Daten in einer Art Datenbank oder einem Speichersystem zu ändern? –

+0

Ich schreibe gerade das Migrationsskript, ich hole die Daten aus der alten Datenbank, ordne sie um und füge sie in die neue Datenbank ein. Wofür ich Hilfe suche, ist während des Umarranging-Teils, bevor ich es an die neue Datenbank sende. – Sickaaron

+1

Da alles andere scheint klar zu sein ... Sie müssen eine PHP-Bibliothek zum Herstellen einer Verbindung zu Ihrer Datenbank finden (PDO hat Treiber für mehrere Engines), verwenden Sie DOMDocument oder einen ähnlichen Parser, um Links aus HTML zu extrahieren und einen regulären Ausdruck zu verarbeiten die tatsächlichen Ersetzungen. –

Antwort

1

Ich bin nicht sicher, was Ihre Tabellenstruktur ist. Sie können eine mysql-Abfrage wie die unten in Ihrer alten Datenbank ausführen, um die Pfade zu aktualisieren. Wenn das nicht hilft, poste deine Tabellenstruktur und ich werde meine Antwort gerne aktualisieren.

sql=" UPDATE page SET page_content = REPLACE(page_content, 'http://www.oldwebsite.com/aknsnd8123nakndkna/upload/images/', 'http://www.newwebsite.com/images/uploaded/')"; 

Hoffe diese Hilfe.

+0

Die Spalte 'PageContent' enthält HTML - gemäß meiner bearbeiteten Frage. Funktioniert das? auch wenn die Zeile HTML enthält? – Sickaaron

+1

@Sickaaron, wie heißt der Tisch, ich nehme "Seite" an. Wenn ja, habe ich die Abfrage aktualisiert. Ich hoffe das hilft. –

0

Ich fand, wie es geht! Danke an Álvaro González für den Vorschlag!

$content = '<h1>'.$page['Page_Title'].'</h1>'; 
    $content .= $page['Page_Content']; 
    $html = new DOMDocument(); 
    $html->loadHTML($content); 
    foreach ($html->getElementsByTagName('img') as $image) { 
     $img = array_reverse(explode('/', $image->getAttribute('src'))); 
     $image->setAttribute('src', $website.'/images/uploaded/'.$img[0]); 
    } 
    $content = $html->saveHTML();