Seite 1 von 2

Viele Bilder und Fotos, wohin damit?

Verfasst: 18.04.2009, 08:15
von JohnBi
Ich brauch einen Rat, ich habe ca. 8000 Kunden, denen will ich ermöglichen bis zu 10 Bilder pro Kunden auf meinen Server zu laden, jeder Kunde hat ne KundenID.

Da ich häufig bei mir am Rechner das Problem habe, das wenn ich viele Ordner oder Dateien habe, mein Windows-Explorer sich aufhängt , möchte ich gerne wissen wie ihr sowas rein Bildtechnisch realisiert.

Ich habe mir gedacht ich erstelle für jeden Kunden einen Ordner mit dem Namen "KundenID" und da packt der Kunde seine Bilder rein.

Das wären am Ende 8000 Ordner, kann das zu Problemen auf meinem Server führen? oder gibt es da ne bessere Lösung, die mir nicht einfällt, wie machen das die Bilderhoster ?

Verfasst:
von

Verfasst: 18.04.2009, 09:51
von Grillmeister
Du kannst auch alle Fotos in den selben Ordner speichern - vorausgesetzt, su stellst sicher, dass es be iden Dateinamen keine Überscheidungen gibt. Ich hab jedenfalls auf meinem Server ein Verzeichnis mit 30.000 Fotos, der Zugriff darauf ist sehr schnell. Wenn man da per ftp ran will, dauert es natürlich ein bisschen. Und es werden eh nicht alle 8.000 Kunden den Dienst nutzen.

Verfasst: 18.04.2009, 09:55
von JohnBi
dank dir, ich hatte mir nur sorgen gemacht, weil windows bei mir bei Ordner mit mehreren tausend Bildern immer abstürtzt... gut dann werd ich das so machen.

woran kann es liegen, das beim FILE Upload nicht das Bild in ein Unterverzeichnis abgelegt wird, aber im Verzeichnis wo sich das Script befindet?

Verfasst: 18.04.2009, 10:31
von Mamphil
Hallo,

du kannst halt praktisch nicht mit dem Windows-Explorer (und auch anderen Programmen, wie z. B. dem in Dreamweaver eingebauten Dateimanager) nicht auf ein solch gut gefülltes Verzeichnis zugreifen. Auch per FTP könnte es Probleme geben.

Wenn das nicht nötig ist, weil du z. B. Konsolenzugriff hast, würde ich die eindeutige, fortlaufende ID verwenden. Ich selbst mache das eigentlich immer so.

Aufwändiger, aber von Windows noch verwaltbar wäre ein Verzeichnisbaum im Upload-Verzeichnis: 10 Verzeichnisse "0" - "9", die wiederum jeweils 10 solcher Verzeichnisse enthalten. Dann kannst du die Dateien jeweils anhand der letzten beiden Zeichen einsortieren: 12345.jpg käme z. B. in /5/4/

Mamphil

Verfasst: 18.04.2009, 10:42
von JohnBi
Ja, genau, das meine ich Mamphil, ich pack die in den Ordner KundenID = 5
also in den Order

/5/1.jpg
/5/2.jpg
/5/3.jpg
/5/4.jpg
usw.

aber irgendwie läd das Script die Datei nicht in den Ordner dabei hat der Ordner 777 Rechte ...

Ich weiss nicht warum das Script nur funktioniert wenn ich es im Verzeichnis habe wo die Bilder reinkommen sollen, wenn ich auf andere Verzeichnisse zugreife läd er das Bild nicht hoch...

Verfasst: 18.04.2009, 11:18
von Grillmeister
Vielleicht ein Sicherheitsproblem? open_basedir? Wenn du kannst setz mal die Warnstufe von PHP hoch, vielleicht sagt er dir dann was nicht passt.

Verfasst: 18.04.2009, 11:21
von JohnBi
das kann gut sein, ich hab null Plan vom ganzen - wie kann ich das beheben, wie machen das andere? Ich erstelle ein Verzeichnis mit mkdir() und dann versuche ich die Datei da hochzuladen aber das klappt nicht, wenn ich aber das selbe Verzeichnis nutze wie wo das Script drinne ist, dann läd er die Dateien hoch.

Verfasst: 18.04.2009, 11:30
von Grillmeister
wie sieht denn dein code für den upload aus? und ist das mit mkdir angelegte verzeichnis ein unterverzeichnis dessen, in dem das script liegt? oder ganz woanders im dateibaum?

Verfasst: 18.04.2009, 11:37
von JohnBi
position vom script...
.../upload/upload.php

ordner wird erstellt
.../upload/5/

Code: Alles auswählen

<head>
</head>
<body>
<?PHP 
foreach&#40;$HTTP_GET_VARS as $name => $value&#41; &#123;$$name = $value;&#125;
foreach&#40;$HTTP_POST_VARS as $name => $value&#41; &#123;$$name = $value;&#125;
foreach&#40;$HTTP_COOKIE_VARS as $name => $value&#41;&#123;$$name = $value;&#125;

$kunden_id='5';
$uploadfile=$_POST&#91;'uploadfile'&#93;;

if&#40;mkdir&#40;$struct_id,0777&#41;&#41;&#123;echo 'Verzeichnis erstellt!<br>$uploaddir';&#125;

&#91;b&#93;//$uploaddir = "public/$kunden_id/";&#91;/b&#93;

if &#40; $_POST&#91;'action'&#93; == "upload" &#41; &#123; 
if &#40;move_uploaded_file&#40;$_FILES&#91;'uploadfile'&#93;&#91;'tmp_name'&#93;, $uploaddir . $_FILES&#91;'uploadfile'&#93;&#91;'name'&#93;&#41;&#41; &#123;

$letzte_id='1';

rename&#40; $uploaddir .$_FILES&#91;'uploadfile'&#93;&#91;'name'&#93;, $uploaddir . $letzte_id . ".jpg"&#41;;

&#125; else &#123;

echo&#40;"Error! "&#41;;
&#125;

if &#40; $_FILES&#91;'uploadfile'&#93;&#91;'error'&#93; == "0" &#41; &#123;

echo&#40;"Value 0,  kein problem ."&#41;;
echo &#40;"<br>"&#41;;

&#125; elseif &#40; $_FILES&#91;'uploadfile'&#93;&#91;'error'&#93; == "1" &#41; &#123;

echo&#40;"Value 1; Datei ist zu groß"&#41;;
echo &#40;"<br>"&#41;;

&#125; elseif &#40; $_FILES&#91;'uploadfile'&#93;&#91;'error'&#93; == "2" &#41; &#123;

echo&#40;"Value 2; Datei ist zu groß"&#41;;
echo &#40;"<br>"&#41;;

&#125; elseif &#40; $_FILES&#91;'uploadfile'&#93;&#91;'error'&#93; == "3" &#41; &#123;

echo&#40;"Value 3; File nur teilweise hochgeladen"&#41;;
echo &#40;"<br>"&#41;;

&#125; elseif &#40; $_FILES&#91;'uploadfile'&#93;&#91;'error'&#93; == "4" &#41; &#123;

echo&#40;"Value 4; Kein File hochgeladen."&#41;;
echo &#40;"<br>"&#41;;


&#125; else &#123; 

echo&#40;"" . $_FILES&#91;'uploadfile'&#93;&#91;'error'&#93; . "
"&#41;;
echo &#40;"<br>"&#41;;

&#125;

echo "<br><a href='upload.php'>weiter...</a>";

?>

<?PHP &#125; else &#123; ?>
<form action='upload.php' method='post' enctype='multipart/form-data'>
<input type='hidden' name='MAX_FILE_SIZE' value='100000'>
File da caricare&#58; <input type='file' style='width&#58;400px' name='uploadfile'><br>
<input type='hidden' name='action' value='upload'>
<input type='submit' value='Upload'>
</form>
<?PHP &#125; ?>
</body>

So funktioniert es, aber sobald ich bei $uploaddir , was eintrage dann läd er nichts mehr hoch...

Verfasst: 18.04.2009, 11:47
von Grillmeister
Probier mal uploaddir als absoluten Pfad anzugeben.

$uploaddir = dirname($SERVER["SCRIPT_FILENAME"]).'/'.$kunden_id.'/';

Verfasst: 18.04.2009, 11:53
von JohnBi
ne, da tut sich immernoch nichts, ich weiss nicht warum, wenn ich

Code: Alles auswählen

$uploaddir = dirname&#40;$SERVER&#91;"SCRIPT_FILENAME"&#93;&#41;.'/'.$struct_id.'/';
auskommentiere klappt es, sonst nicht...

Verfasst: 18.04.2009, 12:25
von JohnBi
der verbietet mir in den erstellten Ordner war reinzuladen ...

Code: Alles auswählen

550 upload.php&#58; Permission denied 
woran kann das liegen?

Verfasst: 18.04.2009, 13:09
von Mamphil
JohnBi hat geschrieben:Ja, genau, das meine ich Mamphil, ich pack die in den Ordner KundenID = 5
also in den Order

/5/1.jpg
/5/2.jpg
/5/3.jpg
/5/4.jpg
usw.
Nein, eben nicht. Denn so hast du für jeden der 8000 Kunden wieder einen Ordner (viel zu viel).

Nach meinem Schema der Aufteilung anhand der ID hast du bei 4 Bildern pro Kunde und 8000 Kunden (also 32.000 Bildern) nur 320 Bilder in jedem der 100 Ordner.

Mamphil

PS: Zu den Upload-Problemen: Arbeitest du mit absoluten oder relativen Pfaden?

Verfasst: 18.04.2009, 13:18
von JohnBi
Danke Mamphil, ich arbeite mit relativen Pfade, das liegt daran das ich mit Bilder-Kram noch nicht viel gemacht habe und das echt totales neuland ist ... ich pack die nun alle in ein Ordner mit fortlaufender ID und wenn es dann irgendwann zu Probleme kommt dann muss ich umdenken.

Das Problem was ich habe ist nun, das ich auch noch die Bilder umdimensionieren muss, also aus nen 800x600 nen 120x80 oder so... ich glaube das Wochenende kann ich mir die ganzen Tuts und weiss der Teufel reinziehen und um die Ohren hauen.

Verfasst: 18.04.2009, 13:32
von Grillmeister
Falls Imagemagick bei dir auf dem Server installiert ist und du die Rechte hast, per Exec() oder Passthru() Shell-Kommandos auszuführen ist das skalieren der Bilder schnell gemacht.