php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 24.10.2008, 12:20  
Neuer Benutzer
 
Registriert seit: 24.10.2008
Beiträge: 2
heinz_m befindet sich auf einem aufstrebenden Ast
Standard include und Pfade

Mahlzeit,
ich stehe vor einem nicht unerheblichen Problem mit einem php script.

Es handelt sich dabei um ein Script zur automatisierung und zur Berichtserstellung. Das ganze läuft lokal in einem Intranet ohne Verbindung nach extern.


Die Strukur auf dem Webserver sieht folgendermaßen in etwa aus:
>localhost/index.php - das PHP Script
>localhost/berichte/test.htm - eine der htm Dateien die includiert werden soll
>localhost/berichte/img_zur_test_htm.jpg - eine der Grafiken die in der HTML eingebunden ist
>localhost/berichte/weiteresubdirs

Die Aufgabe des Scripts ist folgende:
Es liest ein bestimmtes Verzeichniss (berichte) und stellt fest ob es a) HTML/HTM Dateien enthält und/oder b) weitere Unterverzeichnisse gibt. Sobald a) zutrifft werden die betreffenden HTML Dateien per include dargestellt eingebunden und dargestellt.
Genau da ist allerdings mein Problem. Innerhalb der HTML Dateien sind Grafiken ohne absolute Pfadangabe eingebunden (a href="img_zur_test_htm.jpg"). Unglücklicher weise kann die Grafik allerdings nicht angezeigt werden sobald ich die Seite aufrufe da innerhalb des Documentroots nach der img_zur_test_htm.jpg gesucht wird. Die Frage ist jetzt ob man ihm (nur in der betreffenden Bedingung) vorgauckeln könnte das der Documentroot genau an der Stelle ist wo sich die HTML Datei befindet und eben nicht da wo sich die index.php befindet.
Ich hatte bereits andere Lösungsansätze in erwägung gezogen die sich aber letzten endes alle als Sackgasse heraus gestellt haben da somit die Automatisierungskette unterbrochen werden würde.

Ist es möglich eine HTML Datei zeilenweise einzubinden und dann per Patternmatching einzelne Zeilen zu modifizieren? Damit könnte man das Problem meine erachtens auch in den Griff bekommen (den derzeitigen Pfad abfragen und vor die Grafik setzen).

Grüße und TGIF
Heinz
heinz_m ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 24.10.2008, 12:43  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Deine letztere Möglichkeit würde ich vorziehen. Parse die HTML Dateien, such nach <img> Tags und setze vor jeden Link eben noch den Pfad davor. Das denke ich ist die einfachste und beste Methode.
Flor1an ist offline  
Alt 24.10.2008, 12:43  
Erfahrener Benutzer
 
Benutzerbild von Andreas
 
Registriert seit: 22.04.2005
Beiträge: 391
Andreas ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zu A und B:
Dafür könntest du glob() verwenden.

Durchlaufe dann alle gefundenen und prüfe ob es entweder ein Verzeichnis ist oder als Datei-Erweiterung html hat.

Ich würde eine rekursive Funktion schreiben (z.B. $aHtmlRecursive = listHtmlFiles($path)) und dann im Falle eines Verzeichnisses rekursiv aufrufen und alle gefundenen HTML-Dateien am schluss über ein Array zurückgeben.

Zu dem anderen Problem:

Html-Dateien Zeilenweise Einbinden ist an sich quatsch, denn ein include einer HTML-Datei macht in prinzip nichts anderes als:
Code:
include_once("test.html");

// ist (in deinem fall) wohl das gleiche wie
echo file_get_contents("test.html");

Demnach solltest du für jede Datei den Inhalt in einer Variable speichern, ihn nach deinen Wünschen bearbeiten und anschließend ausgeben. Ein Beispiel:

Code:
foreach($aHtmlFiles as $fileLink) {
    $content = file_get_contents($fileLink);
    // achtung! nicht getestet
    $content = preg_replace("/=\"([^"]+\.(jpg|gif|png))\"/isU", dirname($_SERVER["PHP_SELF"])."$1", $content);
    echo $content;
}
Andreas ist offline  
Alt 24.10.2008, 13:34  
Neuer Benutzer
 
Registriert seit: 24.10.2008
Beiträge: 2
heinz_m befindet sich auf einem aufstrebenden Ast
Standard

Danke schön für die beiden Antworten . Vorallem das Einlesen der Dateien in ein Array war mir neu und das ganze klappt auch wunderbar.
Das rekursive durchgehen der Dateien, die Prüfungen hatte ich bereits und das ganze lief auch bis auf den Pfad.

Das kleine Problem was noch offen ist ist das patternmatching. Der String in den HTML Dateien sieht folgendermaßen aus:

<p align="center"><img src="Hostname_History_Laufwerk_C.html.jpg"></p>
wobei Hostname immer verschieden ist. Interessant ist das die Software Grafiken mit der erweiterung .html.jpg ausgibt.

Kann mir jemand helfen das korrekte Patternmatching zu erstellen? Das komplette PHP Script kann ich anschließend durchkommentiert der Allgemeinheit zur Verfügung stellen (wenn es gewünscht wird).

Danke nochmals
Heinz
heinz_m ist offline  
Alt 30.10.2008, 08:49  
Erfahrener Benutzer
 
Benutzerbild von Andreas
 
Registriert seit: 22.04.2005
Beiträge: 391
Andreas ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Funktioniert meins nicht?
Andreas ist offline  
Alt 30.10.2008, 08:56  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Code:
#(<img.*src\s*=\s*")(.*)(\.html\.jpg".*>)#U
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
Alt 06.11.2008, 15:34  
Neuer Benutzer
 
Registriert seit: 06.11.2008
Beiträge: 1
Brainworm befindet sich auf einem aufstrebenden Ast
Standard

Huhu Ich habe ein ähnliches Problem und wollte daher nicht einen neuen Thread aufmachen.

Ok, also folgendes, ich include bei mir eine PHP Datei aus einem anderen Ordner, die aber nicht nur Bilder, sondern auch Links und wiederum andere includes enthält. Aus den oben genannten Gründen geht das ja nicht.

Gibt es dafür keine einfache Lösung? So wie den IFRAME in HTML?

Konkret geht es um folgendes Beispiel:

Ich will diese Bildergalerie ( http://www.paradise-city-muenchen.de/fatman/index.php ) in meine Hauptseite ( Paradise City Muenchen ) includen. Aber das es nicht geht, seht ihr ja selbst. Gibt es keinen anständigen Befehl dafür in PHP, den die includete Datei zwingt, ihren eigenen Ordner zu nehmen?

(Da ich außerdem noch andere PHP Skripte verwenden will, die u.a. verschlüsselt sind, so das ich nichts am Quelltext ändern kann, wäre so ein Befehl toll)

DANKE!!!

galerie.php
Code:
<table width="775" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td colspan="8" align="center"><? include ("header.php") ;?></td>
  </tr>
  <tr>
    <td colspan="8" align="center">

<!-- // ################################# //-->


<? include ("fatman/index.php") ;?>


<!-- // ################################# //-->

</td>
  </tr>
  <tr>
    <td colspan="8" align="center"><? include ("footer.php") ;?></td>
  </tr>
</table>
Brainworm ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
include() ersetzen Shadow21 PHP Tipps 2006 3 30.08.2008 14:13
PHP: Falsche Pfade bei include/require ohne include_path Zergling-new Tutorials 4 20.05.2008 09:55
include isoliert ausführen – Lösungsansatz gesucht veit PHP-Fortgeschrittene 8 09.04.2008 09:26
hinter include wird eine 1 angezeigt |~Râdîant~| PHP Tipps 2008 8 19.09.2007 13:52
include pfäde ? notyyy PHP Tipps 2007 6 29.06.2007 17:47
include Dateien wieder ausängen o.Ä. netti PHP Tipps 2007 8 17.12.2006 15:14
include problem Canni PHP Tipps 2006 26 14.11.2006 14:24
include, nur bestimmten teil neu laden Calli PHP Tipps 2006 2 27.01.2006 15:57
Auf Firmen-Server funzt kein include aus fremden Verzeichnis PHP-Fortgeschrittene 3 19.07.2005 16:49
[Erledigt] Include liegt in einem anderen Verzeichnis - es geht nix PHP Tipps 2005-2 3 03.07.2005 22:40
[Erledigt] Sessions auch bei include aktiv? PHP Tipps 2005 1 28.02.2005 19:58
[Erledigt] Include und Pfade PHP Tipps 2004-2 4 20.12.2004 20:59
[Erledigt] Problemme mit include... PHP Tipps 2004-2 6 30.11.2004 12:20
HTTP_GET_VARS + Include = Array leer PHP Tipps 2004-2 3 24.11.2004 15:12
[Erledigt] Problem mit Include PHP Tipps 2004 17 22.09.2004 15:59

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
include mit pfaden, php derzeitigen pfad, pfade php, http://www.php.de/php-tipps-2008/48419-include-und-pfade.html

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:11 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum