PHP Variable vom Rest trennen

Timdaroxxa

Lieutenant
Registriert
März 2009
Beiträge
954
Hey
sry für die blöde Überschrift, aber ich wusste einfach nicht wie ichs nennen soll!

Hier erstmal ein bischen Code:

<?php
move_uploaded_file($_FILES['datei']['tmp_name'], $directory [UND HIER SOLL JETZT EIN / HIN] $_FILES['datei']['name']);
?>

Ich möchte nämlich auswählen in welches Verzeichnis die Datei soll. Wie mach ich jetzt, dass PHP die Variablen und das / unterscheiden kann? Kennt jemand eine Seite in der ich die allgemeinen Regeln (am besten mit Beispielen) nachlesen kann?


Gruß Tim
 
Meinst du sowas
PHP:
$directory . "/" . $_FILES['datei']['name']
Strings wie immer in Anführungszeichen und die Variablen mit '.' abtrennen.


Mir persönlich ist es aber lieber, wenn man das vorher zusammenbastelt und in einer neuen Variable speichert, also:
PHP:
$ordner = $directory . "/" . $_FILES['datei']['name'];
$datei = $_FILES['datei']['tmp_name'];

move_uploaded_file($datei, $ordner);
 
Zuletzt bearbeitet:
genau, hab ich mir scho gedacht, sehr vielen Dank und sehr schnell ;D

Nochwas: Mein eigentliches Ziel ist, dass sich meine Navi automatisch erweitert wenn ich eine neue PHP Seite hochlade. Nur weis ich nicht genau wie ich da vorgehen soll. Vll. so, dass ich die Seite mit der Navi öffne und dann einen Link mit $directory . "/" . $_FILES['datei']['name'] ?
 
Dazu müsste man etwas mehr von der Seite wissen. Welche Navi? Was wird dort im Moment angezeigt und was genau soll dort zusätzlich angezeigt werden?
 
Als Beispiel: Du hochzuladende Seite heißt: "dritteseite.php"
Meine Navigation ist auf folgender Seite: "navi.php"
und enthält:
<a href="ersteseite.php"></a>< a href="zweiteseite.php"></a>
Und so solls nacher aussehen:
<a href="ersteseite.php"></a>< a href="zweiteseite.php"></a><a href="dritteseite.php"></a>
 
Kannst die Navigation ja über die DB laufen lassen, so hast Du immer aktuelle Daten sofort zur Verfügung:

PHP:
//Mysql
CREATE nav ->
id = int(11) Auto / key
//(40) Mehr zeichen nicht erlaubt, wenn man mehr braucht einfach erhöhen!
data = varchar(40) //dateiname

// dann einfach in php ne schleife und gut ->ala:

$result = mysql_query("SELECT `id`, `data` FROM nav ORDER BY `id` ASC") or (mysql_error());

//schleife
echo '<div class="nav">';
while($row = mysql_fetch_array($result)) {
//Beispiel
echo '<a href="'.$row["data"].'">'.$row["data"].'</a><br />';

}
echo '</div>';

Vielleicht hilfst dir als Lösungsansatz^^
 
sry, ich hab keine Ahnung von MYsql

ich hab dabei eher an eine Lösung gedacht, wobei das Dokument selbst verändert wird. Aber deine Lösung sieht auch net schlecht aus, wenn du mir alles dazu erklären kannst ;D
 
Du kannst aus einem Ordner auch alle Dateien auslesen lassen; in einer Schleife kannst du die Dateinamen dann in <a>-Tags einpacken.

Schau dir mal auf PHP.net das 2. Beispiel zur Funktion readdir an.

Statt echo $file . "\n"; machst du bei dir halt sowas wie echo "<a href=\"" . $file . "\">Link zu " . $file . "</a>\n";.
 
Zuletzt bearbeitet:
danke ;D

habs zwar noch net ausprobiert, aber das is der perfekte Lösungsansatz^^
 
Ich hoffe nur, dass du dann auch ein ordentliches Sicherheitskonzept hast. Denn ein Upload von PHP Dateien per Backend und auch noch automatische Verlinkungen dazu kann unter Umständen fatale Fehler oder eine Spielwiese für Spammer und Co werden.

Ist es denn unbedingt notwendig, dass du PHP Dateien nicht per FTP hochlädst?
 
gut, ich glaube das hab ich kapiert^^ wie kann ich den Dateinamen OHNE Dateiendung (typ) anzeigen lassen? Bei mir sind übrigens alle Dateien PHP

@ S3PSiS: Per FTP würde theoretisch gehen, ist im Endeffekt aber viel mehr Aufwand für mich! Solange ich die UPload Site mit einem Passwort schütze, das nur ich kenne, wird wohl kein anderer was hochladen können oder irre ich mich?
 
Zuletzt bearbeitet:
Gut und wenn ich des jetzt noch Blog-mäßig amchen will:

<?php
if ($handle = opendir('.')) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
echo include(' . $file\n . ')"$file\n";
}
}
closedir($handle);
}
?>

Kann ich die Punkte bei $file/n auch weglaseen?
 
Da du in dem Fall nur eine Variable ohne Text hast, kannst du einfach include($file); schreiben. Das \n steht für einen Zeilenumbruch und hat da drin nichts zu suchen. Und das "$file\n" dahinter gehört da eigentlich auch nicht hin. Da müsste auch eine Fehlermeldung kommen.

Was steht denn in $file? Eigentlich musst du das nicht mit echo ausgeben; via include() wird das, was in der Datei steht genau an der Stelle eingebunden. Ist $file also eine PHP-Datei, dann steht deren Inhalt beim Ausführen dieses Codes genau an der Stelle, wo jetzt dein include(); steht.
 
du hast recht ;D
Ergänzung ()

ähh kennt jemand einen guten Editor mit direkt Vorschau wie beim Dreamweaver? Natürlich kostenlos!
 
Timdaroxxa schrieb:
Ergänzung ()

ähh kennt jemand einen guten Editor mit direkt Vorschau wie beim Dreamweaver? Natürlich kostenlos!

Auch wenn der Editor selber was in Vorschau anzeigt, wird das sicher nicht gehen, ohne die Datei vorher zu speichern. Während drin rumgefummelt wird, ist jeder Ausführungsversuch ja totaler Blödsinn.

Sonst würde nach jedem Zeichen evtl. eine Abfrage erneut ausgeführt oder ähnlicher Unfug.
Und das Drücken von Strg+S und im Browser F5 ist ja wohl kein Problem. Wenn das schon zu viel ist, ist jede Art des Programmierens vermutlich generell zu viel Arbeit.

Klingt hart, ist aber so.
Editor und Vorschau in einem Programm hat z.B. PHPEdit.
 
Warning: include(music/.) [function.include]: failed to open stream: Permission denied in /mnt/web7/30/21/52249221/htdocs/index.php on line 36

Warning: include() [function.include]: Failed opening 'music/.' for inclusion (include_path='.:/opt/RZphp5/includes') in /mnt/web7/30/21/52249221/htdocs/index.php on line 36

Warning: include(music/..) [function.include]: failed to open stream: Permission denied in /mnt/web7/30/21/52249221/htdocs/index.php on line 36

Warning: include() [function.include]: Failed opening 'music/..' for inclusion (include_path='.:/opt/RZphp5/includes') in /mnt/web7/30/21/52249221/htdocs/index.php on line 36

mhhm?
einmal music/. und einmal music/..

die darauffolgenden "includes" werden richtig dargestellt (es sind nur 2, ich hab also keine Ahnung woher die Fehlermeldung kommt)

<?php
if ($handle = opendir('music')) {


while (false !== ($file = readdir($handle))) {
include("music/$file");
}



closedir($handle);
}
 
PHP:
<?php
if ($handle = opendir('music')) {


while (false !== ($file = readdir($handle))) {
 if($file != "." && $file != "..")
  include("music/$file");
}

closedir($handle);
}
?>

Die "Verzeichnisse" . und .. sind für das "aktuelle" und das "übergeordnete" Verzeichnis zuständig. Du musst sie also selbst rausfiltern.
 
Müsste das in der if-Anweisnug nicht eigentlich heißen if ($handle == opendir('.'))?

Aber in beiden Beispielen auf PHP.net ist's auch nur mit einem '='.
 
Nein, ist schon richtig mit einfachem =.

Die Sache ist nämlich, dass er dem $handle einen Wert (in dem Falle opendir('music')) zuweisen möchte und zusätzlich prüft, ob es funktioniert hat.
Ein == würde vergleichen, ob $handle das selbe zurück gibt wie opendir('music').

Um es deutlicher zu machen:
PHP:
<?php

$handle = opendir('music');
if ($handle) {
// alternativ: if($handle == TRUE) {

while (false !== ($file = readdir($handle))) {
 if($file != "." && $file != "..")
  include("music/$file");
}

closedir($handle);
}
?>
 
Zurück
Oben