WebsiteBaker Support (2.13.x) > General Help & Support

Fehler in der Dokumentation

<< < (2/3) > >>

kuerbis42:
so, nun groove ich mich ja wirklich mal ein...

Auf der Seite https://help.WebsiteBaker.org/en/developer-guide/classes-and-functions.php
stehen ja einige Funktionen, die ich nutzen könnte...
Interessant sind natürlich:
directory_list(): returns a array with all subdirectories based on a starting directory
file_list(): returns a array with all files and subdirectories based on a starting directory (possible to exclude files from beeing listed)
get_home_folders(): returns array with all home folders below /media

Leider bekomme ich aber immer nur "nichts" zurück.

Test-Source:

--- Code: ---header('Content-Type: application/json'); /* damit es besser lesbar ist....*/
require_once(WB_PATH."/framework/functions.php");

$base = realpath(WB_PATH."/media");

function read_all_files($root = '.'){ /* von https://www.php.net/manual/de/function.readdir.php */
  $files  = array('files'=>array(), 'dirs'=>array());
  $directories  = array();
  $last_letter  = $root[strlen($root)-1];
  $root  = ($last_letter == '\\' || $last_letter == '/') ? $root : $root.DIRECTORY_SEPARATOR;
 
  $directories[]  = $root;
 
  while (sizeof($directories)) {
    $dir  = array_pop($directories);
    if ($handle = opendir($dir)) {
      while (false !== ($file = readdir($handle))) {
        if ($file == '.' || $file == '..') {
          continue;
        }
        $file  = $dir.$file;
        if (is_dir($file)) {
          $directory_path = $file.DIRECTORY_SEPARATOR;
          array_push($directories, $directory_path);
          $files['dirs'][]  = $directory_path;
        } elseif (is_file($file)) {
          $files['files'][]  = $file;
        }
      }
      closedir($handle);
    }
  } 
  return $files;
}
echo $base." \n";

// WB interne Funkltion:
$all_files = file_list($base);
print_r($all_files);

echo "##########################################\n";
echo "Ersatzfunktion:\n"
$all_files = read_all_files($base); // liefert array aller Dateien & Unterordner
print_r( $all_files);
die();

--- End code ---


Und hier die Ausgabe (function list_files() gibt ein leeres Array zurück, read_all_files() enthält das, was ich brauche:

--- Code: ---/www/wwwroot/6.....de/media
Array
(
)
##########################################
Ersatzfunktion:
Array
(
    [files] => Array
        (
            [0] => /www/wwwroot/6.....de/media/acp_daten/location_images/Gebaude15.jpg
            [1] => /www/wwwroot/6.....de/media/acp_daten/location_images/Gebaude2.jpg
            [2] => /www/wwwroot/6.....de/media/acp_daten/location_images/Gebaude1.jpg
            [3] => /www/wwwroot/6.....de/media/acp_daten/location_images/Gebaude14.jpg
            [4] => /www/wwwroot/6.....de/media/acp_daten/location_images/Gebaude17.jpg
            [5] => /www/wwwroot/6.....de/media/acp_daten/location_images/Gebaude1dsds.jpg
            [6] => /www/wwwroot/6.....de/media/acp_daten/location_images/sueden/Gebaude17.jpg
            [7] => /www/wwwroot/6.....de/media/acp_daten/location_images/sueden/Gebaude1dsds.jpg
            [8] => /www/wwwroot/6.....de/media/acp_daten/dj_images/DJ_1-dj_695bbba3e56087.90944195.jpg
            [9] => /www/wwwroot/6.....de/media/acp_daten/dj_images/DJ_3-dj_695d5a28b9ecd2.32009774.jpg
        )

    [dirs] => Array
        (
            [0] => /www/wwwroot/6.....de/media/calendar/
            [1] => /www/wwwroot/6.....de/media/acp_daten/
            [2] => /www/wwwroot/6.....de/media/acp_daten/dj_images/
            [3] => /www/wwwroot/6.....de/media/acp_daten/location_images/
            [4] => /www/wwwroot/6.....de/media/acp_daten/location_images/sueden/
        )

)
--- End code ---

Was mache ich falsch???

sternchen8875:
Kann es sein, das du WB_PATH nicht zur Verfügung hast? 


--- Quote ---<?php
require('config.php');

//header('Content-Type: application/json'); /* damit es besser lesbar ist....*/
require_once(WB_PATH."/framework/functions.php");

$base = realpath(WB_PATH."/media");

$aFileList = file_list($base);
echo "<pre class='debug-dump'>DEBUG in " . basename(__FILE__) . " on line " . __LINE__ . ":<br>";
print_r($aFileList);
echo "</pre>";

$aDirList = directory_list($base);
echo "<pre class='debug-dump'>DEBUG in " . basename(__FILE__) . " on line " . __LINE__ . ":<br>";
print_r($aDirList);
echo "</pre>";
--- End quote ---

ergibt
File-List
DEBUG in newEmptyPHP.php on line 10:
Array
(
    [0] => F:\cms1\wb_test_1622\media/1015-800x500-grayscale.jpg
    [1] => F:\cms1\wb_test_1622\media/1015-800x500.jpg
    [2] => F:\cms1\wb_test_1622\media/1765895479_image1a.jpg
    [3] => F:\cms1\wb_test_1622\media/1765895479_image1b.jpg
    [4] => F:\cms1\wb_test_1622\media/IMG_0196.jpg
    [5] => F:\cms1\wb_test_1622\media/IMG_0196_800.jpg
    [6] => F:\cms1\wb_test_1622\media/lens.html
)


Folderlist
DEBUG in newEmptyPHP.php on line 15:
Array
(
    [0] => F:\cms1\wb_test_1622\media/faqbaker
    [1] => F:\cms1\wb_test_1622\media/kuerbistest
    [2] => F:\cms1\wb_test_1622\media/mod_image_comparison
)

JSON hab ich mal deaktiviert zum Test, damit kommst du dann ja klar, wenn es erstmal läuft, oder?


zur get_home_folders(): Ergebnis wäre der Ordner des angemeldeten Users, der in der Tabelle users im Feld home_folder steht

es gab in WB mal eine Funktion, die jedem registrierten User ein eigenes Unterverzeichnis in /media zugewiesen hat mit dem Zweck, das jeder User nur aus diesem Bereich Material in den Sectionen verwenden darf. Hat sich aber in der Praxis nicht bewährt, weil es eben die Möglichkeit nahm, auch in anderen media-Ordner zu arbeiten. Hier bedarf es einfach besserer Settings, die einem Admin erlauben, einem User oder Usergruppe auch Zugriff auch andere Ordner zu gewähren.
Diese ganze Schaltung zieht sich durch den kompletten Core und damit dies bei Rektivierung nicht wieder neu programmiert werden muß, blieb der Rest drin. Nur das Anlegen eines solchen Ordner mit entsprechendem Eintrag in der User-Tabelle wurde deaktiviert, weshalb du dort kein Ergebnis bekommst.

Für die neue WB-Version hab ich das nun wieder aktiviert und regle die Zulassung über Gruppenrechte. Ist aber noch nicht spruchreif und eigentlich auch zu starr. Vielleicht fällt mir noch etwas anderes ein
 

kuerbis42:
WB_PATH: doch, der ist gesetzt (ich muss dazu sagen, dass ich das in einer WB-"Seite" programmiere, Abschnitt Code v3.1.0, d.h. es sollte ja sowieso "alles da sein".
Als Template benutze ich WB Default V1.2.3
(achja, den echten Domainnamen habe ich gekürzt, er ist aber normal in der Anzeige)
Wenn ich Dein require('config.php') setze, dann kommt im Debug-Log:

--- Code: ---Sun, 11 Jan 2026 15:50:28 +0000 [E_WARNING] /config.php:[8] from /config.php:[8] define "Constant DB_TYPE already defined"
Sun, 11 Jan 2026 15:50:28 +0000 [E_WARNING] /config.php:[9] from /config.php:[9] define "Constant DB_HOST already defined"
Sun, 11 Jan 2026 15:50:28 +0000 [E_WARNING] /config.php:[10] from /config.php:[10] define "Constant DB_PORT already defined"
....
Sun, 11 Jan 2026 15:50:28 +0000 [E_WARNING] /config.php:[17] from /config.php:[17] define "Constant WB_URL already defined"
PHP Fatal error: Cannot redeclare function SanitizeHttpReferer() (previously declared in /www/wwwroot/60......de/fram....
--- End code ---

Wenn ich  require('config.php') weg lasse, dann kommt:


--- Code: ---DEBUG in view.php(31) : eval()'d code on line 9:
Array
(
)
--- End code ---
und

--- Code: ---DEBUG in view.php(31) : eval()'d code on line 14:
Array
(
    [0] => /www/wwwroot/60....t.de/acp_daten
    [1] => /www/wwwroot/60....t.de/acp_daten/dj_images
    [2] => /www/wwwroot/60....t.de/acp_daten/location_images
    [3] => /www/wwwroot/60....t.de/acp_daten/location_images/sueden
    [4] => /www/wwwroot/60....t.de/calendar
)
--- End code ---

nun habe ich eine dirctcode.php direkt im ./pages-Verzeichnis angelegt (require("../config.php"), also einen zurück):

--- Code: ---DEBUG in dirctcode.php on line 10:
Array
(
)

DEBUG in dirctcode.php on line 15:
Array
(
    [0] => /www/wwwroot/60....t.de/acp_daten
    [1] => /www/wwwroot/60....t.de/acp_daten/dj_images
    [2] => /www/wwwroot/60....t.de/acp_daten/location_images
    [3] => /www/wwwroot/60....t.de/acp_daten/location_images/sueden
    [4] => /www/wwwroot/60....t.de/calendar
)

--- End code ---

Außerdem fällt mir gerade auf:
Es fehlt in der Ausgabe das Verzeichnis "media"
/www/wwwroot/60....t.de/media/acp_daten

Kann es sein, das die Funktion nur auf Windows richtig funktioniert? Du hast es ja lokal ausprobiert, ich  auf einem Debian mit ngx

kuerbis42:



Ich glaube die Funktion dir() ist fehlerhaft https://stackoverflow.com/questions/8081623/is-dir-returns-false-even-when-it-is-a-dir.
Schau mal hier:
https://www.php.net/manual/en/function.scandir.php
Ich habe mir dann mal die folgende Funktion "geklaut", das funktioniert prima.

--- Code: ---<?php
function find_all_files($dir)
{
    $root = scandir($dir);
    foreach($root as $value)
    {
        if($value === "." || $value === "..") {continue;}
        if(is_file("$dir/$value")) {$result[]="$dir/$value";continue;}
        foreach(find_all_files("$dir/$value") as $value)
        {
            $result[]=$value;
        }
    }
    return $result;
}
?>
--- End code ---

sternchen8875:
du mußt viel ruhiger werden...    :wink: :-D

also...

dir() ist nix von WB, das ist eine PHP-Funktion -> https://www.php.net/manual/de/function.dir.php


--- Quote ---ich muss dazu sagen, dass ich das in einer WB-"Seite" programmiere, Abschnitt Code v3.1.0, d.h. es sollte ja sowieso "alles da sein".
--- End quote ---

ja, ist es dort auch. Ich hab nicht im CMS getestet, mir nur das Datenbank-Zeugs von WB geklaut, darum dort die config mit eingebunden, um auf die WB-Funktionen zuzugreifen


--- Quote ---eval()'d code on line 14:
--- End quote ---
stammt aus meinem Code und betrifft immer die Zeile im WB-Code-Editor, egal, ob für Droplets oder Module wie Code oder Code²
in diesem Fall gehts um das hier

--- Code: ---" . basename(__FILE__) . " on line " . __LINE__ . "
--- End code ---

schreib es so, ist der eval-Fehler auch weg


--- Code: ---$aFileList = file_list($base);
echo "<pre class='debug-dump'>DEBUG:<br>";
print_r($aFileList);
echo "</pre>";
--- End code ---

in deiner ersten Antwort verwendest du


--- Code: ---$base = realpath(WB_PATH."/media");
--- End code ---

lass dir das dort direkt ausgeben und kontrolliere es. Kann ich von hier aus nicht sehen, nur darauf vertrauen, das du das auch richtig angibst.
Noch als Hinweis: /media ist ein Verzeichnis, das nicht jeder benutzt. Was gültig ist, steht in den WB-Optionen unter Servereinstellungen -> Medienverzeichnis:
(nur änderbar bei einer Neuinstallation)



--- Quote ---Kann es sein, das die Funktion nur auf Windows richtig funktioniert? Du hast es ja lokal ausprobiert, ich  auf einem Debian mit ngx
--- End quote ---

Nein, sonst würde WB ja nicht funktionieren und online schaut das ja nicht anders aus, nur die Pfade ändern sich -> https://i.gyazo.com/92423774d0a8e4074fd251ed5ca3d5d8.png


noch als Tip: wenn du WB als Basis nutzt, würde ich auch dabei bleiben. WB ermittelt den Serverpfad  selbst und unabhängig von dem, was real auf dem Server passiert. Hab grad ne halbe Stunde gesucht, warum das Löschen beim Upgrade nicht geht - ja, da fehlte ein Slash am Ende  :-(




Navigation

[0] Message Index

[#] Next page

[*] Previous page

Go to full version