Veröffentlicht 26. März 20196 j Hallo, ich will folgendes kleines php Skript in ein Wordpress Template einbinden. Ich habe das Skript auch eingebunden bekommen, nur listet es mir alle Dateien auf, die es da findet. Es sollen aber nur PDF´s aus einem bestimmten Ordner aufgelistet werden. Der Rest der Dateien sollen nicht in der Liste erscheinen. Der Ordner liegt auch auf der selben Ebene wie das Template. Ich habe Schwierigkeiten den Pfad bei der Zeile $path="." richtig anzugeben, sodass er den Ordner mit den PDF´s findet und auch beim ausschließen der anderen Dateien außer den gewünschten PDF´s. Das Skript ist Teil einer alten Seite, die nicht unter Wordpress lief. Es sollte aber auch übernommen werden: <table width="800" border="0" cellspacing="0" cellpadding="0"> <tr> <td><div align="center" class="Stil9">Download Analysenzertifikate </div></td> </tr> </table> <br> <table width="90%" border="0" cellspacing="0" cellpadding="2"> <tr bgcolor="#FF3333"> <td><span class="Stil7">Artikelbezeichnung<a href="#"></span></td> <td><span class="Stil7">Artikel-Nr.</span></td> <td><span class="Stil7">Charge</span></td> <td><span class="Stil7">Verwendbar bis</span></td> <td><span class="Stil7">Download</span></td> </tr> <?php $path="."; read_dir($path); function read_dir($dir) { $path = opendir($dir); while (false !== ($file = readdir($path))) { if($file!="." && $file!=".." && $file != "index.php" && $file != "zip") { if(is_file($dir."/".$file)) $files[]=$file; else $dirs[]=$dir."/".$file; } } if(isset($dirs)) { natcasesort($dirs); foreach($dirs as $dir) { echo $dir; read_dir($dir); } } if($files) { natcasesort($files); $zaehler=0; foreach ($files as $file){ //echo "$file <br>"; $file2 = ereg_replace("\(r\)", "<SUP>®</SUP>", $file);//wir basteln uns ein Registrierungszeichen //$file2 = ereg_replace("ae", "ä", $file2);// und nun ein �//$file2 = ereg_replace("oe", "ö", $file2);// und nun ein �//$file2 = ereg_replace("ue", "ü", $file2);// und nun ein $split = explode("_", $file2);// und nun teilen wir den Dateinamen in seine Einzelteile, als trennung haben wir ein"_" if(sizeof($split)==5){ // Hier wird kontrolliert ob auch alle Einzelteile bestehen $kontrolle = $split[0]; // teil1 $system = $split[1]; // teil2 $charge = $split[2]; // teil3 $verfall = $split[3]; // teil4 $werteblatt = $split[4]; // teil5 //$disk = $split[5]; // teil6 //$cdrom = $split[6]; $kontrolle=verweis($kontrolle); // Kontrolle wird, falls vorhanden, mit Link versehen //$diskette = substr($disk, 0, 1); //$diskette=$disk; //$cd_rom = substr($cdrom, 0, 1); if($zaehler%2==0){ // unterschiedliche Einfaerbung der Zeilen echo "<tr class=\"Stil8\">"; }else{ echo "<tr class=\"Stil2\">"; } echo "<td>$kontrolle</td><td> $system</td><td>$charge</td><td>$verfall</td><td>"; // if ($werteblatt<="0"){ echo "nicht vorhanden";//was steht im bereich werteblatt - muss eigentlich eine 1 sein - aber man kann ja nie wissen }else{ echo "<img src=\"../img/pdf.gif\"> <a href=\"$file\" target=\"_blank\"> Download</a>"; // } echo"</td></tr>"; } $zaehler++; } // Ende der foreach-Schleife ////////// } closedir($path); } function verweis($wert){ global $links; // etwas umstaendlich , dafür aber sehr sauber, weil inicht auf einen nicht vorhandenen Indesx bzw. Schluessel zugegriffen werden kann, Also wird erst nachgesehen ob Schluessel ueberhaupt existiert und im Erfolgsfall, dann auf den assoziativen Wert zugegriffen; ansonsten wird erst gar nicht versucht auf den Wert zuzugreifen $schluessel=array_keys($links); // Hier wird ein Array mit den Schluesseln aus dem assoziat. Array $blutkontrollen erstellt if(in_array($wert,$schluessel)){ // Schluessel ist im Array vorhanden, es kann also der Wert gesucht werden $adresse="http://www.beispiel.de/deutsch/produkte/".$links[$wert]; return "<a href='$adresse' target='_blank'>$wert</a>"; }else{// Schluessel ist NICHT im Array vorhanden, es kann also kein Wert gesucht werden, bzw es wird nur Ausgangswert zurueckgegeben return $wert; } } ?> <tr bgcolor="#FF3333"> <td colspan="7"><span class="Stil7">Sollte die von Ihnen gesuchte Datei nicht vorhanden sein, so treten Sie bitte mit uns in Kontakt. </span><span class="Stil7"></span></td> </tr> </table> Das Skript ist leider von einem Vorgänger von mir, den ich dazu leider nicht mehr zu rate ziehen kann. Ich hoffe man kann mir hier helfen. Vielen Dank schon mal im voraus! Bearbeitet 26. März 20196 j von brunos1997
26. März 20196 j Brauchst du die rekursive Suche im Verzeichnis? Ich würde den Teil, in dem das Verzeichnis durchsucht wird wegwerfen und glob() nutzen. https://www.php.net/manual/de/function.glob.php <?php foreach (glob("*.txt") as $filename) { echo "$filename - Größe: " . filesize($filename) . "\n"; } ?> Anschließend passiert ziemlich viel mit den einzelnen Dateien. Ein paar Sachen muss man wohl fachlich wissen, andere Sachen sehen nur komisch aus. Was ich als erstes machen würde, wenn ich mit dem Code arbeiten müsste: Backup von diesem Code machen auskommentierte Codezeilen wegwerfen restliche Kommentare in ordentlicher Form und gut formuliert aufschreiben Code ordentlich einrücken bei If und Else Klammern setzen Dann lässt sich das schonmal besser lesen. Anschließend dann glob() einbauen.
26. März 20196 j Das Skript ist wie gesagt nicht von mir und ich sollte es nur aufjedenfall übernehmen. Das Skript nimmt die PDF Dateinamen und extrahiert daraus Daten wie die Artikelnummer, Chargennummer und Verfallsdatum und überführt diese in eine Tabelle und stellt die PDFs zum Download bereit. Deswegen ist es wahrscheinlich auch so umständlich programmiert. Es funktioniert ja auch nur listet es halt alle Dateien auf, die Wordpress enthält. Wenn ich es auf den speziellen Ordner mit den PDFs beschränken könnte, würde mir das schon reichen. Aber ich werde deine Änderungsanmerkungen mal versuchen umzusetzen.
26. März 20196 j vor 1 Stunde schrieb brunos1997: Ich habe Schwierigkeiten den Pfad bei der Zeile $path="." richtig anzugeben, was ist denn das problem?
27. März 20196 j Das Beste wäre tatsächlich wenn du das ganze Ding umstellst und glob benutzt. Aber falls du den vorhandenen Code nur kurz mit Panzertape zusammenflicken möchtest um die PDFs zu finden, dann schau dir mal folgende Zeile an: vor 17 Stunden schrieb brunos1997: if($file!="." && $file!=".." && $file != "index.php" && $file != "zip") { Dort wird der jeweils aktuelle Dateiname überprüft. Schau doch einfach, ob $file mit ".pdf" endet. Was die $path angeht: In "__DIR__" steht in PHP der aktuelle Ordner deiner PHP-Datei. jetzt kannst du damit (und eventuell mit realpath) den relativen Pfad zu dem Ordner mit den PDFs basteln. Sprich, wenn sich die PDFs in einem Unterordner zur PHP-Datei mit dem Namen "PDF" befinden, dann machst du $path = __DIR__ . "/PDF"; Falls sich die PDFs in einem Geschwisterordner (ebenfalls mit dem Namen "PDF") zu der PHP-Datei befinden, dann: $path = realpath(__DIR__ . "../PDF");
27. März 20196 j Autor $path = __DIR__ . "/PDF"; Danke, dass hat mir schon sehr geholfen! Jetzt listet er alle PDF´s richtig auf und füllt auch die Tabelle korrekt. Nur leider klappt der Download der Dateien noch nicht. Wenn ich auf download klicke, dann kommt leider Fehler 404 Seite nicht gefunden. Er versucht auf eine Unterseite weiter zuleiten, die ca so im Browser aufgerufen wird: www.domain.de/PDFname Muss da vlt auch noch eine Änderung zu, weil die PDF´s ja in nem extra Ordner liegen? Danke nochmal für die Hilfe!
27. März 20196 j vor 30 Minuten schrieb brunos1997: Muss da vlt auch noch eine Änderung zu, weil die PDF´s ja in nem extra Ordner liegen? Exakt. Der Downloadlink zeigt momentan ja nur auf den Dateinamen, aber es muss der Name + Pfad angegeben werden. Aus dieser Zeile: vor 18 Stunden schrieb brunos1997: echo "<img src=\"../img/pdf.gif\"> <a href=\"$file\" target=\"_blank\"> Download</a>"; // Mach am Besten etwas in die Richtung: echo "<img src=\"../img/pdf.gif\"> <a href=\"PDF/$filepath\" target=\"_blank\"> Download</a>"; Natürlich hier auch statt "PDF" den Namen des Unterordners angeben
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.