[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Abfrage aus DB und Serververzeichnis - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Maidenaustria
Beiträge: 293
Registriert: 7. Mär 2006, 10:43
Wohnort: Österreich

Abfrage aus DB und Serververzeichnis

4. Jul 2007, 14:57

Hallo!

Ich möchte in einem Modul folgende Informationen ausgeben:
1. Mit

Code: Alles auswählen

SELECT COUNT( * )
FROM phpbb_kb_articles

die Anzahl der Datensätze der phpbb_kb_articles ausgeben
2. Die Anzahl und die Gesamtgröße der Files in einem odner am Server

Kann mir da jemand helfen das in ein richtiges Statement zu verpacken??

Danke euch jetzt schon!

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

4. Jul 2007, 15:21

~~~ moved ~~~

dag
Beiträge: 369
Registriert: 24. Aug 2004, 22:11
Wohnort: Dortmund
Kontaktdaten: Website

5. Jul 2007, 13:54

Hallo,
zur Datenbankabfrage gibt es eine Beschreibung im Wiki.
http://wiki3.redaxo.de/index.php?n=R3.SQL-Beispiele

Grüße
Dagmar

Maidenaustria
Beiträge: 293
Registriert: 7. Mär 2006, 10:43
Wohnort: Österreich

6. Jul 2007, 19:12

Danke!
OK, die Abfrage an die Datenbank bzl. Tabelleneinträgen hab ich *stolzbin*

Jetzt fehlt mir "nur" noch die Abfrage der Files in einem Server-Verzeichniss...

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

6. Jul 2007, 19:15

Hi,

du willst also ein Verzeichnis auslesen?
http://php.net/opendir

Gruß,
Markus

Maidenaustria
Beiträge: 293
Registriert: 7. Mär 2006, 10:43
Wohnort: Österreich

6. Jul 2007, 20:17

OK, die Gesamtfilegröße hab ich auch schon !!!

*geil*

Ich poste dann das ganze Modul wenns fertig ist...

Danke schon ma vorab!

Maidenaustria
Beiträge: 293
Registriert: 7. Mär 2006, 10:43
Wohnort: Österreich

6. Jul 2007, 22:49

Code: Alles auswählen

<?php 
$qry = 'SELECT COUNT(*) AS total FROM phpbb_kb_articles'; 
$sql = new sql(); 
$result = $sql->get_array($qry); 
foreach($result as $row)  

?>

Momentan befinden sich <b><?php echo ''. $row['total'] .'' ?> </b>Artikel in der Iron Maiden Enzyklopädie.<br>
<br>
Dabei verwendeter Speicherplatz - benötigt für die Beschreibung der Items:

<?php
$dir = "../../bb/userpix/";
$do = opendir($dir);
$size = 0;
while($file = readdir($do)){
	$size += filesize($dir."/".$file);
}
closedir($do);
echo round($size/1024,2)." KB"; 
echo "(~";
echo round($size/1024200,00)." MB";
echo ")";
echo "<br>";

// Verzeichniss oeffnen
$handle = opendir($dir);

// Anzahl Blider
$bilderNum = 0;

// Dateien auslesen
while ($file = readdir($handle))
{
// Nur JPG Files beachten
if ((strstr($file,".jpg") != false) || (strstr($file,".JPG") != false))
{

// Anzahl Bider um 1 erhoehen
$bilderNum++;

}
}
// Verzeichnis schliessen
closedir($handle);

// Ausgabe
echo "für =".$bilderNum;
echo "Bilder verwendet!!";
?>
So sieht's aus...
ist noch ein etwas unsortierter Haufen...muß ich noch sortieren...
Tortzdem funktionierts... leider nur im Backend! Hast du eine Idee warum?

Dr KillerJoe
Beiträge: 1711
Registriert: 24. Nov 2005, 22:29
Kontaktdaten: ICQ Website Yahoo Messenger

6. Jul 2007, 23:36

Hi.

Ich tippe mal auf die Pfadangabe ($dir), daß es nur im Backend funktioniert^^

probier mal statt

$dir = "../../bb/userpix/";

Code: Alles auswählen

$dir = $REX['HTDOCS_PATH']; //Ordner wo das Frontend liegt
$dir .= "../bb/userpix/"; //Ausgehend vom Frontend anpassen
(ungetestet)

mfg
Flo
Die Doku und Wiki sind Deine Freunde!!!

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

7. Jul 2007, 08:49

Hi,

Ausserdem würd ich bei den Dateiendungen auch auf JPEG prüfen, das macht der IE , statt JPG.

Gruß,
Markus

Maidenaustria
Beiträge: 293
Registriert: 7. Mär 2006, 10:43
Wohnort: Österreich

7. Jul 2007, 15:11

stimmt die Prüfung so?

Code: Alles auswählen

if ((strstr($file,".jpg") != false) || (strstr($file,".JPG") != false) || (strstr($file,".JPEG") != false))
{
Danke für eure Hilfe!
Ihr seid echt toll! :D

Maidenaustria
Beiträge: 293
Registriert: 7. Mär 2006, 10:43
Wohnort: Österreich

7. Okt 2007, 01:53

Also dieses Modul hat sich in dieser Form ja sehr bewährt!
Nur eines noch - jetzt hab ich auf Grund des enormen Datenaufwandes bereits 2 Verzeichnisse - wie frage ich die denn zusammenaddiert ab??

aktuell:

Code: Alles auswählen

<?php
$dir = $REX['HTDOCS_PATH']; //Ordner wo das Frontend liegt
$dir .= "../bb/userpix/"; //Ausgehend vom Frontend anpassen 
$do = opendir($dir);
$size = 0;
while($file = readdir($do)){
	$size += filesize($dir."/".$file);
}
closedir($do);
echo round($size/1024,2)." KB"; 
echo " <b><font color=#FF9933>(~";
echo round($size/1024200,00)." MB";
echo ")</font></b>";
echo " REX_VALUE[4]<br>";

// Verzeichniss oeffnen
$handle = opendir($dir);

// Anzahl Blider
$bilderNum = 0;

// Dateien auslesen
while ($file = readdir($handle))
{
// Nur JPG Files beachten
if ((strstr($file,".jpg") != false) || (strstr($file,".JPG") != false) || (strstr($file,".JPEG") != false))
{

// Anzahl Bilder um 1 erhoehen
$bilderNum++;

}
}
// Verzeichnis schliessen
closedir($handle);

// Ausgabe
echo "REX_VALUE[5]<b><font color=#FF9933> ".$bilderNum;
echo "</font></b> REX_VALUE[6]";
?>

Benutzeravatar
Koala
Beiträge: 1612
Registriert: 3. Okt 2005, 13:20

7. Okt 2007, 10:08

Maidenaustria hat geschrieben:Nur eines noch - jetzt hab ich auf Grund des enormen Datenaufwandes bereits 2 Verzeichnisse - wie frage ich die denn zusammenaddiert ab??
In dem du die Verzeichnisse in einer eigenen Schleife durcharbeitest?
Die Verzeichnisnamen kannst du dazu in ein Array packen. Damit kannst du das jeder Zeit beliebig erweitern oder wieder Verzeichnisse rausnehmen.
Du hattest in deiner Berechnung noch einen Fehler drin. Bei der Verzeichnisbetrachtung musst du '.' und '..' ausschließen!

Code: Alles auswählen

<?php
$dir_array = array ('../bb/userpix/', '../bb/foo/');

foreach ($dir_array as $value) {
  $dir = $REX['HTDOCS_PATH'] . $value; //Ordner wo das Frontend liegt
  $do = opendir($dir);

  while($file = readdir($do)){
    if ($file <> '.' && $file <> '..') { // Exclude self and parent folder
      $size += filesize($dir."/".$file);
    }
  }
  closedir($do);
}

...
?>
Das funktioniert nur für einfache Verzeichnisse.
Möchtest du auch Unterverzeichnisse mit beachten, schau dir mal das Beispiel auf php.net an.
<?php print $Footer; ?>

Sven

Ich würde ja die Welt verändern,
doch der Quellcode ist mir zu absurd!


REX 5 :: Tricks und Tipps
REX 5 :: Modulesammlung

Wiki zu Redaxo 3 und 4 (!nur noch im Webarchiv!)

Maidenaustria
Beiträge: 293
Registriert: 7. Mär 2006, 10:43
Wohnort: Österreich

9. Okt 2007, 21:52

Vielen Dank Koala!!

Kannst du mir nur noch erklären warum das zählen der Files nicht analog funktiniert??

Code: Alles auswählen

// Verzeichniss oeffnen
$dir_array = array ('../bb/userpix/', '../bb/userpix2/');

foreach ($dir_array as $value) {
$dir = $REX['HTDOCS_PATH'] . $value; //Ordner wo das Frontend liegt
$handle = opendir($dir);

// Anzahl Blider
$bilderNum = 0;

// Dateien auslesen
while ($file = readdir($handle))
{
// Nur JPG Files beachten
if ((strstr($file,".jpg") != false) || (strstr($file,".JPG") != false) || (strstr($file,".JPEG") != false))
{

// Anzahl Bilder um 1 erhoehen
$bilderNum++;

}
}
// Verzeichnis schliessen
closedir($handle);
}

// Ausgabe
echo "REX_VALUE[5]<b><font color=#FF9933> ".$bilderNum;
echo "</font></b> REX_VALUE[6]";

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

9. Okt 2007, 22:31

Hi,

statt

((strstr($file,".jpg") != false) || (strstr($file,".JPG") != false) || (strstr($file,".JPEG") != false))

würd ich

((strstr(strtolower($file),".jpg") != false) || (strstr(strtolower($file),".jpeg") != false))

das machen..

Gruß,
Markus
Zuletzt geändert von Markus.Staab am 10. Okt 2007, 00:43, insgesamt 1-mal geändert.

Maidenaustria
Beiträge: 293
Registriert: 7. Mär 2006, 10:43
Wohnort: Österreich

10. Okt 2007, 00:11

nö - so funktioniert jetzt gar nichts mehr..

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

10. Okt 2007, 00:43

Ich hab oben nen Fehler gefixed.

Maidenaustria
Beiträge: 293
Registriert: 7. Mär 2006, 10:43
Wohnort: Österreich

10. Okt 2007, 21:54

OK, also das funktioniert wieder...
Trotzdem wird nur die Anzahl der Files im 2. Verzeichnis angegeben und nichts mit dem 1. Verzeichnis addiert....

Benutzeravatar
Koala
Beiträge: 1612
Registriert: 3. Okt 2005, 13:20

10. Okt 2007, 22:31

Maidenaustria hat geschrieben:Kannst du mir nur noch erklären warum das zählen der Files nicht analog funktiniert??
Weil du zu umständlich daran gehst :wink:

Versuch es damit:

Code: Alles auswählen

// Verzeichniss oeffnen
$dir_array = array ('../bb/userpix/', '../bb/userpix2/');
// Anzahl Blider 
$bilderNum = 0;

foreach ($dir_array as $value) {
  $dir = $REX['HTDOCS_PATH'] . $value; //Ordner wo das Frontend liegt
  $handle = opendir($dir);

  while($file = readdir($handle)){
    if ($file <> '.' && $file <> '..') { // Exclude self and parent folder
      // Nur JPG Files beachten 
      $f = getimagesize($dir.$file);
      if ($f[2] == 2) {
        // Anzahl Bilder um 1 erhoehen 
        $bilderNum++; 
      }
    }
  }
  // Verzeichnis schliessen
  closedir($handle);
}

// Ausgabe
echo "REX_VALUE[5]<b><font color=#FF9933> ".$bilderNum;
echo "</font></b> REX_VALUE[6]";

Kurze Erklärung.
Mit Hilfe von getimgesize() wird die übergebene Datei direkt analysiert und nicht nur auf den Namen geachtet. Damit werden auch Dateien als JPG erkannt, wenn sie z.B. foo.gif heißen, aber in Wirklichkeit ein foo.jpg sind. Und umgekehrt werden keine Dateien als JPG betrachtet, die sich als solche ausgeben, aber gar keine sind.
<?php print $Footer; ?>

Sven

Ich würde ja die Welt verändern,
doch der Quellcode ist mir zu absurd!


REX 5 :: Tricks und Tipps
REX 5 :: Modulesammlung

Wiki zu Redaxo 3 und 4 (!nur noch im Webarchiv!)

Maidenaustria
Beiträge: 293
Registriert: 7. Mär 2006, 10:43
Wohnort: Österreich

10. Okt 2007, 23:04

dauert das bei 10.000 Fotos aber schon etwas länger oder?

EDIT: Funktioniert PRIMA!!

Ich danke euch allen wiedermal recht herzlich!!!

Benutzeravatar
Koala
Beiträge: 1612
Registriert: 3. Okt 2005, 13:20

10. Okt 2007, 23:34

Maidenaustria hat geschrieben:Ich danke euch allen wiedermal recht herzlich!!!
Rechnung folgt :D
<?php print $Footer; ?>

Sven

Ich würde ja die Welt verändern,
doch der Quellcode ist mir zu absurd!


REX 5 :: Tricks und Tipps
REX 5 :: Modulesammlung

Wiki zu Redaxo 3 und 4 (!nur noch im Webarchiv!)

Zurück zu „Sonstiges“