Zum Inhalt springen
  • 0

[php] dateien von auflistung ausschließen und anzeigen lassen


brunos1997

Frage

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>&reg;</SUP>", $file);//wir basteln uns ein Registrierungszeichen
//$file2 = ereg_replace("ae", "&auml;", $file2);// und nun ein �//$file2 = ereg_replace("oe", "&ouml;", $file2);// und nun ein �//$file2 = ereg_replace("ue", "&uuml;", $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 von brunos1997
Link zu diesem Kommentar
Auf anderen Seiten teilen

8 Antworten auf diese Frage

Empfohlene Beiträge

  • 2

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");

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 1

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.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
Gast brunos1997

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
$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 wirdwww.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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...