PHP Ordner mit Arraywert benennen

El Präsidente

Lt. Commander
Registriert
Dez. 2007
Beiträge
1.295
Guten Abend,
ich brauch mal kurz ein bisschen Hilfe.


Habe mir folgenden PHP-Code geschrieben und möchte diesen noch ausbauen.

PHP:
<?php 
if ( mkdir ( 'TEST', 0700 ) )
{
  echo 'Verzeichnis erstellt!';
}
?>

Er bewirkt, dass beim Aufruf der PHP Datei ein Verzeichnis auf dem Server erstellt wird, und ich möchte dass dieses Verzeichnis jeweils einen Zufallswert als Namen bekommt. Dazu lag mir nahe dazu ein Array mit Zufallszahlen zu erzeugen und jeweils einen Wert aus dem Array für die Beschriftung des Ordners heranzuziehen.

Eine weitere für mich denkbare Lösung war es eine Variable zu definieren, die mit irgendner Random-Zahl belegt ist und diese Variable soll dann der Name für den Ordner sein, wüsste ich aber auch nicht wie das zu realisieren ist.

Da ich mit PHP noch nicht soviel am Hut habe, weiß ich nicht so recht wie ich das anstellen könnte.

Vielleicht kann mir das mal jemand coden und hier posten.

LÖSUNG:
PHP:
<?php 
$ordnername = rand(1,1221); // Zufallszahlen von 1 bis 1221
if ( mkdir ( $ordnername, 0700 ) )
{
  echo 'Verzeichnis erstellt!';
}
?>


mfg
 
Zuletzt bearbeitet:
Wenn's dir nicht zu lang ist, könntest du ja einfach den aktuellen timestamp benutzen; damit hättest du gleichzeitig das Problem gelöst, dass damit nie ein doppelter Name (den du sonst jedesmal prüfen musst) erzeugt werden kann.
 
PHP:
<?php 
  $timestamp = time();

if ( mkdir ( $timestamp, 0700 ) )
{
  echo 'Verzeichnis erstellt!';
}
?>

Funktioniert wunderbar mit Timestamp :=) Danke
 
aber bedenke, dass timestamp nicht unendlich ist ;)
 
Nächstes Problem

PHP:
<?php 


  $timestamp = time();

if ( mkdir ( $timestamp, 0777 ) )
{
  echo 'Verzeichnis erstellt!';
}

$tempname = $_FILES['file']['tmp_name']; 
$name = $_FILES['file']['name'];

$type = $_FILES['file']['type']; 
$size = $_FILES['file']['size'];  

if($type != "image/gif" && $type != "image/pjpeg") { 
    $err[] = "nur gif und jpeg Dateien dürfen hochgeladen werden."; 
} 
if($size > "15000000") { 
    $err[] = "Die Datei welche du hochladen willst, ist zu gross!<br>Maximale Dateigrosse beträgt 15 KB!"; 

}  if(empty($err)) { 
[COLOR="Red"]    copy("$tempname", $timestamp); 
    echo "Die Datei $name wurde erfolgreich hochgeladen!"; 
} 
else { 
    foreach($err as $error) 
    echo "$error<br>"; 
} 

?>


In der Zeile hier sage ich ihm halt, er soll die Datei im Timestamp benannten Verzeichniss ablegen: copy("$tempname", $timestamp);

Doch da motzt er, weiß jemand Rat ?

Warning: copy(1269373348) [function.copy]: failed to open stream: Is a directory in /homez.111/xxxxxxxxxxxxxxxxxxxxx on line 24
 
Du musst dem Copy-Befehl den kompletten Zieldateinamen mitgeben, nicht nur das Zielverzeichnis
Übrigens sagt das die Fehlermeldung auch... "Is a directory "

@Koki_87: Aha, und was willst uns damit sagen?
 
Zuletzt bearbeitet:
das war eher nur ein scherz ;)

Timestamp: 01-01-1970 bis 19-01-2038
--> d.h. der Timestamp erzeugt werte, die nur bis zum 19.01.2038 gelten

zu deinem problem, die normalen Funktionen von php sind gut fürs bilder hochladen, aber falls du weitere funktionen haben willst, schau dir doch einfach mal imagick an
 
Soo das Problem ist auch behoben und schon bäumt sich das nächste auf.

Quellcode sieht jetzt wie folgt aus:

PHP:
<?php 


  $timestamp = time();

if ( mkdir ( $timestamp, 0777 ) )
{
  echo 'Verzeichnis erstellt!';
}

$tempname = $_FILES['file']['tmp_name']; 
$timestamp = $_FILES['file']['name'];

$type = $_FILES['file']['type']; 
$size = $_FILES['file']['size'];  

if($type != "image/gif" && $type != "image/pjpeg") { 
    $err[] = "nur gif und jpeg Dateien dürfen hochgeladen werden."; 
} 
if($size > "15000000") { 
    $err[] = "Die Datei welche du hochladen willst, ist zu gross!<br>Maximale Dateigrosse beträgt 15 KB!"; 

}  if(empty($err)) { 
copy("$tempname", $timestamp); 
    echo "Die Datei $name wurde erfolgreich hochgeladen!"; 
} 
else { 
    foreach($err as $error) 
    echo "$error<br>"; 
} 

?>


Der Dateiupload klappt, jedoch wird die Datei nicht ins Verzeichnis welches durch den Timestamp benannt wurde abgelegt, sondern einfach in den Root-Ordner, also dort wo das Scriptifle liegt. Vielleicht kann mir das jemand ausbessern, weil dann bin ich fertig mit dem was ich vorhatte.
 
hiho nochmals...

Du sollst auch nicht den Inhalt von $timestamp ändern -> hat ja keinen Sinn.

stattdessen

copy($tempname, $timestamp.'/'.$_FILES['file']['name'])
machen... (mit unverändertem $timestamp)

oder
$targetname = $timestamp.'/'.$_FILES['file']['name'];
...
copy($tempname, $targetname)
 
Fixed
 
Zuletzt bearbeitet:
Zurück
Oben