När man laddar upp filer med hjälp av POST placeras de i tmp på servern (verkade i och för sig vara någon plats som hette owner på mitt webhotell). När då safe mode är aktiverat tillåts man inte flytta (eller kopiera) filen därifrån till den plats där man vill ha den med move_uploaded_file() eller copy().
Det är vad jag har råkat ut för.
Någon som vet om det finns något kryphål?
Kan man be webbhotellet göra något?
När safe mode är påslaget så kontrollerar PHP om filen/filerna/katalogen du försöker använda har samma ägare som scriptet som exekveras. Det du även kan testa med är att du sätter ut hela sökvägen till mappen du ska ladda upp till.
/r tänkte helt fel. :r
Kör själv med safe mode på och har inga problem. Du har väl satt CHMOD så du har skrivrättigheter till mappen?
Jo, jag vet och det är precis det som är problemet. För som jag förstår det måste filer som laddas upp med http-post placeras i någon slags tmp-mapp. Och på mitt webbhotell är det inte jag som är ägare till den. Så skriptet verkar inte ha några rättigheter alls till filerna som placeras där.
Ett tips jag annars läste var att problemet skulle vara att man inte tilläts ta bort filerna och då istället för move_uploaded_file() kunde använda copy(). Men det gjorde ingen skillnad. Fortfarande:
PHP skrev:
Warning: copy(): SAFE MODE Restriction in effect. The script whose uid is 90005 is not allowed to access / owned by uid 0 in (skriptfilen)
Den mappen (root) kan jag givetvis inte heller sätta CHMOD på.
Kan jag på något sätt bestämma att filen ska hamna direkt i den mapp jag vill? Annars verkar det ju som sagt vara så att den måste hamna i serverns tmp-mapp till att börja med.
Om du kollar i exemplet i manualen så sätter de målmappen med
$uploaddir = '/var/www/uploads/';
tmp mappen är webbhotellets inställning som du inte behöver bry dig om, där hamnar alla filer du laddar upp först, sen flyttas dom till den mapp du själv väljer.
Ja men $uploaddir i exemplet i dokumentationen är ändå bara vart filen ska flyttas (med move_uploaded_file) efter att den har laddats upp . Innan dess kommer den att placeras i en tmp-mapp. Och som sagt kan jag inte använda move_uploaded_file på det sättet eftersom jag inte har tilräckliga rättigheter för tmp-mappen.
r:
... sen flyttas dom till den mapp du själv väljer.
Det är just det jag måste göra med mitt skript och just det jag inte tillåts på de sätt jag har provat.
Och koden som tar emot det postade (bara filen här):
$uploaddir = "/resultat/";
$uploaduserfile = $uploaddir . basename($_FILES['userfile']['name']);
if (move_uploaded_file($_FILES['userfile']['tmp_name']}, $uploaduserfile")) {
echo "<p>Filen laddades upp!
några sql-frågor osv.
Problemet verkar vara att filen med hjälp av http-post tillfälligt placeras i mappen "/" (och inte tmp, men det är kanske där filerna borde hamna ändå) på webhotellet. Och den får jag inte komma åt med min move_uploaded_file.
Tja, att jag hade en oavslutat if-sats var inte direkt problemet. Det där var bara lite snabbt och slarvigt urklippt från min kod. Den där satsen avslutas korrekt.
Vad som däremot utgjorde ett problem var att jag hade:
$uploaddir = "/resultat/";
Jag tänkte: Documentroot/resultat/ , där ska de hamna
Servern tänkte Serverroot/resultat/ , den har du inte rättigheter till din busunge.
Jag tänkte om:
$uploaddir = "../resultat/";
Allt fungerade precis som det skulle, jag kände mig ganska fånig.