02. april 2006 - 17:43Der er
25 kommentarer og 1 løsning
PHP opret ny mappe på server (mkdir)
Via en formular skal der kunne oprettes en ny mappe, med et vilkårligt nummer der ligeledes gemmes i databasefeltet "folder", sammen med de øvrige indtastninger.
Mappen skal oprettes på en distanitation som: gallery/DEN NYE MAPPE (altså i mappen gallery).
Der er point til den, som kan hjælpe med kildekoden, mht. hvordan det skal laves og få det til at virke.
Scriptet ser således ud, indtil videre:
photo.add.php -->
<?php
require('../access/access_config.php');
// Creating option tags with year data $Res = mysql_query("SELECT id, year FROM photo_year ORDER BY year"); $CategoryOptions = ""; while (list($CategoryId,$CategoryTitle) = mysql_fetch_row($Res)) { $CategoryOptions .= "<option value=\"$CategoryId\">".stripslashes($CategoryTitle)."</option>\n"; } ?>
mysql_query("INSERT INTO photo_album (ip, year, date, title, description, author, folder) VALUES ('".$_POST['ip']."','".$_POST['year']."',NOW(),'".$_POST['title']."','".$_POST['description']."','".$_POST['author']."','".$_POST['folder']."')") or die(mysql_error()); header("Location: photo.add.php");
}
?>
For at det skal virke, bliver du nødt til at give world-write rettigheder på mappen. Hvis du ikke ved hvad det går ud på, så tager vi den derfra..
I øvrigt er mit eksempel ikke komplet, da det ville være yderst fornuftigt at tjekke indholdet af $_POST['folder'], for at det ikke indholder en suspekt indtastning.
Mappens navn skal blot være vilkårligt, bare havde et nummer som kan relateres til et album i databasen. Mere derfor, jeg ikke har lavet noget input dertil i formularen.
olebole --> Jeg vil benytte samme regel til at oprette dette spørgsmål: "Er der ikke indløbet TILFREDSSTILLENDE svar på et spørgsmål efter 7 dage, er det dog tilladt at lukke det oprindelige spørgsmål, og oprette et nyt identisk"
Jeg lukker spørgsmålet og starter forfra, som der står i reglerne. Og tak for en masse unødvendig post i dette indlæg.
fixxxer --> Der kommer ingen warning eller lign. frem. Den går automatisk videre til header("Location: photo.add.php"); jvf. ovenstående script. Mener jeg har world-skrive rettigheder, men ikke sikker. Via ftp, og mappens egenskaber kan jeg se, at alle felter er hakket af som skriverettigheder til alle.
photo.add.php har jeg tilføjet et felt, der hedder input: <tr> <td width="11%" height="21">Mappens navn</td> <td width="1%" height="21">:</td> <td width="88%" height="21"><input type="text" name="folder" size="42"></td> </tr>
Mit gæt er, at du mangler en slash på efter $root, da PHP returere DOCUMENT_ROOT uden trailing slash. Desuden virker det underligt at du skal to niveauer under DOCUMENT_ROOT, i stedet for et.
Rel path: /home/virtual/domæne.dk/public_html../../photoalbum/navnAbs path: Warning: mkdir(/home/virtual/domæne.dk/public_html../../photoalbum/navn): No such file or directory in /home/virtual/domæne.dk/public_html/administration/photo/photo.config.php on line 11
Mon ikke fejlen ligger i at $root ikke slutter med en slash.
Vi kunne stole på at $_SERVER[DOCUMENT_ROOT] altid returnere uden afsluttende slash, men vi kunne også skrive en funktion der tilføjer denne hvis den mangler. Den vil dog kun virke på Linux installationer.
function add_slash($string) { if ($string[strlen($string)-1] != '/') return $string.'/'; else return $string; }
Fixxxer, nu får jeg følgende fejl efter dit indlæg 01.53.53
Rel path: /home/virtual/domæne.dk/public_html/../../photoalbum/nuAbs path: Warning: mkdir(): open_basedir restriction in effect. File(/home/virtual/domæne.dk/public_html/../../photoalbum/nu) is not within the allowed path(s): (/home/virtual/domæne.dk:/home/virtual/_tmp) in /home/virtual/domæne.dk/public_html/administration/photo/photo.config.php on line 18
Jeg forstår dog ikke denne linie: File(/home/virtual/domæne.dk/public_html/../../photoalbum/nu) is not within the allowed
Efter mappen public_html skal den ikke ind i 2 mapper og derefter finde photoalbum. Den ligger i selve roden, altså public_html
Netop, jeg forstod heller ikke hvorfor du skulle 2 niveauer op over din www-root.
Da mappen nu er oprettet af webserveren og ikke via FTP, skulle du uden problemer kunne oprette nye mapper og filer, inde i den oprettede mappe, via PHP.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.