Hoi alleen, ik ben bezig voor een klant met een script.. met het script verwerkt geuploade plaatjes en zet deze in de database en in een directory op de server van mijn klant.
maar ik krijg de volgende error
een tmp directory aanmaken waarin de 'geuploade' files opgeslagen zou moeten worden, deze staat nu overal met de rechten 777 (om te testen) maar niets werkt.
Ik kreeg van hun de volgende uitleg.
wie o wie kan me helpen, mijn klant wil zo graag zijn website online hebben..
maar ik krijg de volgende error
nu moest ik volgens de beheerders van de webhoster (digitalus)Warning: Unable to create './gfx/abstract/sig2datbanner.jpg': Permission denied in /home/virtual/site171/fst/var/www/html/test/adminedit.php on line 163
Warning: Unable to move '/tmp/phpe7MSsI' to './gfx/abstract/sig2datbanner.jpg' in /home/virtual/site171/fst/var/www/html/test/adminedit.php on line 163
een tmp directory aanmaken waarin de 'geuploade' files opgeslagen zou moeten worden, deze staat nu overal met de rechten 777 (om te testen) maar niets werkt.
Ik kreeg van hun de volgende uitleg.
ik gebruik gewoon de move_uploaded_file($myfile,$newfile); en zou dus moeten werken volgens de text..Ja, u heeft waarschijnlijk te maken met een safe mode restrictie
onderstaande tutorial hoe hier omheen te werken zal wel duidelijkheid geven omtrent wat er hier mis gaat bij u;
"Bestanden uploaden met safe mode aan
Velen hebben reeds het gemak ontdekt van het beheren van een site via de
webbrowser. Gewoon met je browser naar een administratiepagina, teksten
bijwerken, links toevoegen of verwijderen of bestanden uploaden en misschien
zelfs in een database plaatsen. Dat laatste is erg interessant, maar wordt
alleen lastig als safe mode aanstaat. Safe mode legt een aantal beperkingen
op aan PHP om de veiligheid van de server te kunnen waarborgen. Ook de
open_basedir restrictie wordt door veel providers gebruikt. Deze restrictie
zorgt ervoor dat programmeurs van PHP scripts geen bestanden kunnen
aanroepen buiten hun home directory. Iedereen zou anders in elkaars home
directory kunnen gaan neuzen. Normaal hoeft dit geen probleem te zijn,
totdat je gebruik gaat maken van het uploaden van bestanden via een
webbrowser.
Velen hebben het wel eens gedaan. Via een formulier in HTML een bestand naar
de webserver uploaden. Denk hierbij aan een pasfotootje voor je Yahoo!
profile. Wat er feitelijk gebeurt als je een bestand upload naar een
webserver is het volgende:
De webserver slaat het binnengekregen bestand op in de /tmp directory van de
server. In een speciale variable komt de naam te staan van dit bestand dat
de Apache webserver heeft aangemaakt.
Het script dat wordt aangeroepen door het formulier waarmee het bestand
ge-upload is krijgt deze variabele (met de naam van het bestand) door en kan
zo bijvoorbeeld het bestand open, inlezen in een variable en in een database
plaatsen.
Als het script klaar is met het bestand wordt het vanzelf door de server
verwijderd.
De oplettenden onder ons hebben al een probleem gesignaleerd. De apache
server plaatst het bestand in de /tmp directory. Als er een open_basedir
restrictie gebruikt wordt die de programmeur alleen in staat stelt bestanden
te gebruiken in de eigen home directory te gebruiken, is het niet mogelijk
om bestanden te openen in de /tmp directory. Dit zal ook leiden tot een
foutmelding.
Nu is daar gelukkig een oplossing voor! De functie move_uploaded_file. Deze
functie heeft twee parameters nodig: source file en destination. Het script
controleert of het bestand source file wel echt een bestand is dat via de
apache server is ge-upload. Als dat het geval is, verplaatst de functie het
bestand naar de opgegeven destination. Is het geen via apache ge-upload
bestand, dan doet de functie niets.
Nu even een praktijkvoorbeeld.
Eerst gaan we een pagina maken met daarin het formulier dat voor de upload
moet gaan zorgen. Hiervoor moet je wel een aantal speciale parameters aan de
FORM tag meegeven.
<form action="upload.php" method="post" enctype="multipart/form-data">
De enctype parameter is erg belangrijk. Zonder deze parameter gaat het
uploaden niet goed.
Ook moet je nog een speciale variabele meesturen met daarin de maximale
bestandsgrootte in bytes opgegeven.
<input type="hidden" name="MAX_FILE_SIZE" value="153600">
In dit geval accepteren we geen bestanden groter dan 150Kb. Nu moeten we nog
een INPUT tag gebruiken voor het selecteren van het te uploaden bestand.
<p>
Selecteer een bestand: <input type="file" name="myfile">
</p>
Nog een submit knop en het script is klaar.
<input type="submit">
</form>
We hebben in de FORM tag gezegd dat het script het bestand upload.php aan
moet roepen. We gaan dus nu beginnen met het script genaamd upload.php, dat
de daadwerkelijke verwerking van het ge-uploade bestand voor zijn rekening
neemt.
In dit geval ga ik het bestand in een MySQL database plaatsen. Ik heb al een
MySQL connectie aangemaakt, genaamd $db.
Wat we ook nodig hebben is een eigen tmp directory, in dezelfde directory
waar het upload script in staat. Maak deze aan, en geef iedereen alle
rechten in deze directory (chmod 777 tmp). Deze directory gaan we gebruiken
om het bestand tijdelijk in te plaatsen.
Ook moeten we even een unieke naam verzinnen voor het bestand. Het beste is
een 'random generated' naam. In het onderstaande voorbeeld maak ik een
bestansnaam die 4 tot 10 karakters lang mag zijn en alle kleine letters van
a t/m z kan bevatten.
$newfile = "tmp/";
for ($a = 0; $a < mt_rand(4,10); $a++) {
$newfile .= chr(mt_rand(97,122));
}
Nu hebben we een willekeurige naam gegenereerd en deze in de variable
$newfile geplaatst.
Nu gaan we het bestand van /tmp verplaatsen naar onze tmp directory.
move_uploaded_file($myfile,$newfile);
De $myfile variable komt overeen met de naam die we aan de INPUT tag in het
vorige script gegeven hebben. Het bestand staat nu in de tmp directory die
we net hebben aangemaakt, en is dus te gebruiken door ons script!
Nu lees ik de inhoud van het bestand in een variable in, en deze variable
komt in een veld van de database te staan.
$binarydata = addslashes(fread($newfile,"r"), filesize($newfile));
mysql_query("insert into files (binarydata) values ($binarydata)", $db);
unlink($newfile);
Nog even een unlink actie om het bestand te verwijderen (het zit nu toch in
de database!). Je hoeft natuurlijk niet per se het bestand in een database
te zetten. Je kunt ook een specifieke directory aanmaken en daar alle
ge-uploade bestanden in plaatsen. Zorg dan wel dat iedereen alle rechten
heeft in die directory (de user waaronder de apache server draait moet
namelijk kunnen schrijven in die directory). Hoe je dit verder moet
aanpakken laat ik over aan je eigen fantasie"
wie o wie kan me helpen, mijn klant wil zo graag zijn website online hebben..
[ Voor 3% gewijzigd door Verwijderd op 28-03-2003 06:45 ]