ChatKult Communitypowered by Next 1.0.14
ChatKult FORUM · Next 1.0.14
Forenübersicht » [ Technik & Multimedia ] » PHP-Problem - dir()

PHP-Problem - dir()

Hiho alle zusammen -

folgendes:

Es sollen Fotos angezeigt werden, also lasse ich ein Verzeichnis mit dir() auslesen. Jetzt kommen aber Traffic-Probleme auf, daher sollen die Fotos auf einen anderen Server gelegt werden - wie kann ich das Verzeichnis auf dem anderen Server auslesen lassen? Habe versucht, einfach die URL vor%27s Verzeichnis zu setzen, bekomme dann aber einen Fehler.
Der andere Server ist nicht php-fähig, das Script muss also auf dem alten Server liegen bleiben.

---------------------------

Anschaulicher:

bisher:

$picFolder = %27colour/%27;
$picDir = dir($picFolder);

zukünftig:

$picFolder = %27fremderServer/colour/%27;
$picDir = dir($picFolder);

---------------------------

Jetzt, wo ich drüber nachdenke, erscheint mir auch logisch, dass ich nicht einfach eine URL eintragen kann - sonst könnte ich ja jeden xbeliebigen Ordner auslesen lassen. Aber wie kann ich es trotzdem tun? *g*

Danke schonmal -

Aba
von hinten durch die brust ...

hast du FTP-Zugriff auf den "fremden" Server. Dann nimm einfach die FTP-Funktionen zum Auslesen des Verzeichnisses.

Ich denke am WE mal genauer drüber nach
Jupp, die Daten habe ich ... ftp-Funktionen ... hm, ok, ich schau mal, was ich dazu finde *fgfg* Danke schonmal, Echo!
... mich läßt sowas nie in Ruhe also

1. http://www.php.net/manual/de/ref.ftp.php

achte mal auf ftp_nlist, ftp_rawlist, ftp_cdup, ftp_chdir

ich geh mal davon aus, das du nur die Dateinamen abfragen willst
Hi Echo - erstmal :-love - habe mir alles mal angeschaut, aber nach ewigem Rumprobieren will%27s noch nicht funktionieren und mir raucht jetzt anständig der Kopf, ich mach mich morgen erst wieder ans Werk :-)

*guts Nächtle*
... ich kämpfe derzeit noch mit Gruppenkalendern im Thunderbird und WebDAV auf Apache. (nebenbei mit diversen anderen kleine Sachen) Aber vllt setze ich mich mal ran wenn mein FTP richtig läuft, sowas ähnliches brauche ich auch bald.
Puh, erst den Thread gesehen.

Ist es nicht mit der include()-Variante möglich?
dateien einbinden aber wenn ich es richtig verstanden hab geht es um das Auflisten des Verzeichnisinhaltes
Ach? Sowas wie das Prinzip function show_dir blabla?

Es wäre doch wesentlich einfacher, wenn Aba mal den kompletten Script reinschmeisst, so dass ich (oder auch du) dann genau weiss, worum es genau geht. Die Diagnose, den Mangel aufzudecken, würde auch wesentlich schneller erfolgen. gg
*zitter* Also, äh - ich bin SCHUSTERIN, keine "Ich bin Queen der sauberen Codes"-Programmiererin :-p Ich stückel mir alles so zusammen, wie ich es brauche ... nun genug der Entschuldigungen vorneweg *g*

<?

$picsInARow = 7;
$picFolder = "colour/";
$picDir = dir($picFolder);

### Ordner auslesen ###

$liste = array();

while($check = $picDir->read())
{
if(strpos($check,%27.jpg%27)) $liste[] = $check;
}

sort($liste);

### Output ###

$count = 1;

$deci = array();

for ($i=1; $i<=sizeof($liste); $i++)
{
$deci[$i] = $i;

while(strlen($deci[$i]) < strlen(sizeof($liste)))
{
$deci[$i] = %270%27 . $deci[$i];
}
}

echo %27 <table border=0 cellspacing=7 cellpadding=0>
<tr>%27;

$i = 0;

foreach ($liste as $value)
{
$i++;

echo %27<td align=left valign=top><a href="foto_show.php?action=show&picFolder=%27 .$picFolder. %27&pic=%27 .$value. %27&nr=%27 .$deci[$i]. %27" target="fotos">»%27 . $deci[$i] . %27</a></td>%27;

if ($count == $picsInARow)
{
echo %27</tr><tr>%27;
$count = 1;
}

else
{
$count++;
}
}

echo %27</tr>
</table>%27;

?>


Ich lasse also einen Ordner voller Fotos auslesen, schaue, dass nur jpgs berücksichtigt werden, und lasse dann eine Navigation aufbauen, die wie folgt aussieht:

»01 »02 »03 usw.

Die Navi übergibt dann Infos an foto_show.php .
Solange der Foto-Ordner auf dem gleichen Server wie das Script liegt, ist alles wunderbar. Jetzt soll der Ordner aber auf einen anderen Server ausgelagert werden - und da beginnen die Probleme, die ich dank Echos Hinweis nun mit ftp-Funktionen zu lösen hoffe ;-)

Nun alles klar? *fg*

[edit]Einrückungen kann das Forum nicht darstellen - ich hoffe, ihr steigt trotzdem noch durch den Code durch ;-)
Also, wenn ich jetzt mal nur allein mit dem Code von php.net versuche, überhaupt eine Verbindung mit dem Server herzustellen, bekomme ich schon eine Fehlermeldung :-( Der Code:

<?php
// Herstellen der Basis-Verbindung
$conn_id = ftp_connect("ftp.irgendwas.de");

// Einloggen mit Benutzername und Kennwort
$login_result = ftp_login($conn_id, "Benutzername", "Passwort");

// Verbindung überprüfen
if ((!$conn_id) || (!$login_result)) {
echo "Ftp-Verbindung nicht hergestellt!";
echo "Verbindung mit $ftp_server als Benutzer $ftp_user_name nicht möglich";
die;
} else {
echo "Verbunden mit $ftp_server als Benutzer $ftp_user_name";
}

ftp_quit($conn_id);
?>


Das ergibt folgende Fehlermeldung:
Fatal error: Call to undefined function: ftp_connect() in /raid/domains/com/s/xyz/htdocs/www/ftp.php on line 3


;-( Versteht der Server allein schon den Befehl ftp_connect() nicht? *buhuhu*

[edit]Natürlich habe ich in meinem Script die richtigen Logindaten stehen ;-)
Und hier [gelöscht] könnt ihr sehen, was phpinfo() liefert ... hilft das weiter?
Habe jetzt mal den ftp_connect-Befehl auf meinem eigenen Server ausprobiert, scheint wunderbar zu funktionieren. Dann liegt es doch wohl wirklich an der PHP-Installation auf dem Server meines Bekannten ... ?
Lass mal das ftp-Präfix mal weg.

Also statt %27ftp.irgendwas.de%27 in %27irgendwas.de%27 probieren.
fröschchen, der Server heisst nunmal ftp.irgendwas ;-) Aber ich habe auch schon versucht, mich mit www.sinenumero.de (also unserem Server) zu verbinden - derselbe Fehler :-/

Wenn ich dasselbe Spiel auf meinem eigenen Server mache, geht%27s wunderbar.
Ah, habe mir das php-Info mal angeschaut. Da fehlt das FTP-Support in der Liste, daher konnte es nicht funktionieren. Wenn es nen Hoster gibt, dann sollte man ihn benachrichtigen, dass man beim nächsten Systemupdate die FTP-Funktion aktivieren sollte.

Als Vergleich: http://www.froggyland.de/phpinfo.php zwischen gd und exif.
Hmh, danke, werde dann gleich mal meinen Bekannten anrufen und es ihm sagen ;-) Tja, dann gibt%27s also erstmal keine Lösung für mein Problem - bis sein Host reagiert. Hoffen wir mal, dass es ziemlich schnell geschieht s-)
Ich hoffe mal mit. ;)

Wann gibt mal hier ne Kategorie für Programmierungen u.a. mit Code-Tags? ^^
Wieso nutzen wir nicht einfach eine SH Funtion:

read.sh
>># dir >> /var/www/html/files.php

Da sollte jetzt eine Liste der Deteien sein...

Jetzt kann man per

findNoCase(string,value,start)

herausfinden wo die Picliste anfaengt...
Dann ziehen wir doch auch gleich mal den ganzen bash shice raus:

RemoveChars(len(x),20,1)

Ihr koennt das ja aus CFML ^^ auf PHP umleiten un probieren
ahja ...

und wie geht das dann übers Netz nur mit dem http-Protocol?
(lokal auf der Maschine ist alles kein Problem)
Woher kommen die Fotos? Müssen die sowieso ab und an mal hochgeladen werden? Ein anderer Lösungsansatz - ist zwar was umfangreicher aber dafür sauberer: Uploadscript schreiben, welches den Pfad der hochgeladenenen Datei zusätzlich in eine Datenbank schreibt. Tabelle mit Pfaden auslesen, wenn die Foto angezeigt werden sollen.
coole Idee, nur eben kann man dann nicht schnell mal ein bild in das Verzeichnis packen und dann auslesen lassen. Es muß immer über dem "Umweg" Upload-Script gehen.

Ein weiteres Problem wird die PHP-Begrenzung der hochzuladenden max. Dateigröße sein (default 2MB in der php.ini) und selbst wenn man das hochschrauben kann brauch eine Datei ein paar sekunden bis sie hochgeladen ist und da greift dann die maximale Laufzeit eines Scriptes (30sek in der php.ini)

Nebenbei ist es mühsam Bilder einzeln hochzuladen. Dann lieber per FTP und die gleich im Block.
Das stimmt, hat auch div. Nachteile. Wobei Fotos über 2 MB nicht wirklich webtauglich wären ; ). Vorteilhaft sind die typischen Datenbank-Vorteile. Es lassen sich halt beliebige weitere Werte zusammen abspeichern. Benutzerangabe, Infotext, Hits, IP etc... wenn es denn nötig ist. Ansonsten wäre eine Datenbank wohl überdimensioniert.
@ m1st3r_r00t: klingt ja alles /0ll c00l - aber ich versteh%27s nicht wirklich ;-)

@ nog: Hmh, Datenbank (bzw. Textdatei) wäre noch eine Möglichkeit. Aber - ich will die einfachste Lösung *g* Bisher war es supi-dupi-leicht, gerade für den Bekannten, den man ruhig als DAU bezeichnen kann (sorry, falls du das lesen solltest, Chris :-p) - er musste nur seine Fotos in den Ordner packen (mit dem FTP-Programm kann er umgehen ;-)), und *zack* wurden sie wie gewünscht angezeigt.

Ein FTP-Proggi bietet mehr Möglichkeiten/gibt mehr Kontrolle - du kannst noch schnell ein Bild verschieben, kurz umbenennen, ferner müssen Dateien auch wieder gelöscht werden - geht zwar alles auch mit einem Script, das ist für mich aber die umständlichere Methode (zumal ich es schreiben müsste, und bei meinen rudimentären Kenntnissen wäre das einiges an Arbeit für mich :-p - ein Programm kannst du dir fertig an jedem Kiosk runterladen ;-)). Und dann kommen noch die Einschränkungen hinzu, die Echo schon genannt hat - die gibt%27s bei ftp nicht.

----------

So, da Kontent nicht gewillt scheint, den FTP-Support zu aktivieren ("FTP-Module sind in PHP nicht installiert, da wir keine Verbindungen von unserem Server zu externen Rechnern zulassen."), wird sich mein Bekannter wohl einen neuen Anbieter suchen müssen. Zwischenzeitlich werde ich auf meinem Server schonmal an der FTP-Funktionen-Lösung arbeiten, bei mir geht das ja ;-) Melde mich dann, wenn ich was zustande gebracht habe.
"Benutzerangabe, Infotext, Hits, IP etc" Nenene, sowas braucht%27s nicht ;-) Das ist keine Community, sondern nur ein Fotodesigner, der seine Fotos präsentieren will - pur, roh, ohne Schnickschnack *g*
ein anderer Umweg:
(ja ich weiß ich denke sehr verquer, aber ich bin Linkshänder, ich darf das.)

Also:

Server1 (deiner Aba) hat den FTP-Script und greift damit auf den Server3 (wo die Bilder liegen zu). Server2 (der bei Kontent) ruft also den FTP-Script auf bekommt damit eine definierte Textform geliefert aus der er die Pfade zu den Bildern auslesen kann.

naaaaaa, bin ich gut oder bin ich gut :-grins

Ich hoffe es war halbwegs verständlich.

P.S. und ja, ich hab einen Knall
ein paar Sachen will ich dann doch mal kommentieren:

[...]Wobei Fotos über 2 MB nicht wirklich webtauglich wären ; )[...]

Wenn ich Designer bin und meine Arbeiten präsentieren will dann sollte mir schon gestattet sein das meine Grafiken in möglichst vielen Farben und hoher Auflösung und damit größere Dateien zu speichern und anzuzeigen
[...]Vorteilhaft sind die typischen Datenbank-Vorteile. Es lassen sich halt beliebige weitere Werte zusammen abspeichern. Benutzerangabe, Infotext, Hits, IP etc... [...]


Und auch da ist wieder das Problem, dass von einem zum anderem Server übers Netz zugegriffen werden muß. Und ich glaub nicht, das irgendein Provider der MySQL-Port nauch aussen aufmacht (und von PostgreSQL haben die meisten ja noch nicht mal was gehört). Weiterhin kommt es ziemlich schnell zu Fehlern in der Datenbank wenn nämlich der Upload fehlschlägt und der Datenbankeintrag aber passiert ist (oder umgekehrt. Da immer zwei verschiedene Maschinen unterschiedliche Daten vorhalten müssen ist der genaue Abgleich dieser Daten zwingend nötig. Die notwendigen Fehlerroutinen blähen das ganze dann so sehr auf, dass ein anderer Anbieter dann die einfachste Lösung ist.

Wichtig Aba, wenn Dein Bekannter auch Bilder von der Digicam direkt veröffentlicht soll er drauf achten, dass im PHP der "Exif"-Support freigeschaltet ist.

Damit lassen sich dann die Exif-Daten (Belichtungswerte usw.) auslesen
Deine Argumente stimmen schon, habe gestern zu wenig über die Probelmatik der 2 Server nachgedacht. Wobei ich finde, dass das Argument der max. Dateigröße nicht wirklich zieht, - weil - wer schaut sich eine Gallerie an, bei der erst mal 20 MB geladen werden müssen? Ausserdem kostet Traffic auch Geld. Das sollte auch ein Designer bedenken. ;-) Die ftp-Lösung wird wohl die sinnigste sein.
... es sei Dir verziehen, eine Maschinen- /Standort- (und womöglich noch Plattform)-übergreifende Konfiguration wird in der Branche an keiner Stelle wirkliche Bedeutung beigemessen. (ausser man will 6stellige Summen dafür ausgeben) Ich bin in meinem Denken dahingehend meiner Zeit immer schon 5-8 Jahre vorraus gewesen. ;-)

Bei mir z.b. ist die PHP-Uploadgröße auf 1MB beschränkt. Bei %27nem mittelgroßen Digicamfoto ohne Komprimierungsverluste bin ich da schon an der Grenze. Wenn ich das als TIFF nehme habe ich weit über 2MB.

Ich hoffe dabei ich habe richtig verstanden, dass es hier nicht um eine Bildergalerie geht sondern um Grafiken zum runterladen in entsprechend sauberen und vor allem verlustfreien Formaten.
Lass doch die Bilder auf dem gleichen Server... Dann kann das Skript ja auch durch ein Form (enc type: multipart-form/data) hochgeladen werden.

Ich mach des mal in CFML vor:

<cfoutput> <cfif isDefined(%27upload%27)>
<cffile action = "upload"fileField = "file" destination = "J:userpix" nameConflict = "MakeUnique" accept = "image/jpg, image/gif, image/jpeg, image/png, image/pjpeg">
Die Datei "#cffile.clientFile#" aus "#cffile.clientDirectory#" wurde erfolgreich hochgeladen. <cfif isDefined("#cffile.fileWasRenamed#")>Jedoch musste die Datei umbenannt werden. Ihr neuer Name ist #cffile.serverFile#.</cfif><br><br>Ihr Bild ist nun unter <a href="http://#CGI.remote_host#:8500/userpix/#cffile.serverFile#/" alt="Ihr Bild">http://#CGI.remote_host#:8500/userpix/#cffile.serverFile#/</a> zu erreichen.
<cfelse>
<form action="upload.cfm" method="post" enctype="multipart/form-data">
Pfad auf dem Lokalen Computer:<br>
<input type="file" name="file">
<input type="hidden" name="upload" value="1">
<br>
<input type="submit" value="Upload">
</form>
</cfif></cfoutput>
die Bilder liegen aber aus diversen Gründen (Traffic, Balancing) auf unterschiedlichen Servern. Auf der gleichen Maschine kann das ja jeder. s-)




P.S. die Kunst in dieser Branche besteht nun mal darin die eigenen Fähigkeiten an die Bedürfnisse der "Kunden" anzupassen und NICHT die Bedürfnisse der Kunden auf das eigene Niveau runterzuschrauben. :-grins