webForumDet fria alternativet

Uploadfel - failed to open stream

12 svar · 565 visningar · startad av bassebhu

bassebhuMedlem sedan nov. 20016 480 inlägg
#1

Hej!

Får följande fel:

Warning: move_uploaded_file(/images/bild.gif): failed to open stream: No such file or directory in gallery/upload.php on line 59

Warning: move_uploaded_file(): Unable to move '/tmp/phpucU6fP' to '/images/bild.gif' in gallery/upload.php on line 59

Har testat 3 olika uppladdningsscript som sägs ska funka, jag får samma felmeddelande. Är det min sökväg som inte är bra eller är det fel på servern? Movedelen är den här:

$upload_dir = '/images/';
[...]
move_uploaded_file($_FILES['userfile']['tmp_name'],$upload_dir.$_FILES['userfile']['name']);

Är det exakt sökväg jag måste ha? :o

Sökte här och hittade en med liknande problem men hans lösning funkade inte för mig.

Mvh, Sebastian

MatteMedlem sedan aug. 20002 975 inlägg
#2

I PHP utgår absoluta sökvägar från diskroten inte webbroten.

Vill du ha en absolut sökväg från diskroten fungerar det för det mesta med:

$upload_dir = $_SERVER['DOCUMENT_ROOT'].'/images/';

Annars använd en relativ sökväg.

GrodanBollMedlem sedan sep. 2001788 inlägg
#3

Jepp, medans om du ska radera en fil (unlink) så fungerar endast relativa sökvägar (iaf för mig).

Har dock för mig att det där med sökväg från diskroten (vid uppladdning av fil) endast gäller Windows? Kan dock inte kolla det själv. Någon som vet?

Konsekvent som attan. :)

MatteMedlem sedan aug. 20002 975 inlägg
#4

En absolut sökväg från diskroten i PHP börjar med / speciellt på Linux/unix. Egentligen börjar den på c:\ på Windows, men att skriva / fungerar också.

Vad jag menade var att $_SERVER['DOCUMENT_ROOT'] ger för det mesta, men dock inte alltid, webbroten.

Det finns webbservrar där denna servervariabel inte finns, och det finns tillfällen då webbservern är konfigurerad så $_SERVER['DOCUMENT_ROOT'] inte ger webbroten.

Men ger $_SERVER['DOCUMENT_ROOT'] rätt sökväg till webbroten, så fungerar den mot alla filsystemsrelaterade sökvägar, inklusive unlink, och de flesta sökvägar i PHP är mot filsystemet eftersom PHP arbetar på servern.

bassebhuMedlem sedan nov. 20016 480 inlägg
#5

Matte skrev:

I PHP utgår absoluta sökvägar från diskroten inte webbroten.

Vill du ha en absolut sökväg från diskroten fungerar det för det mesta med:

$upload_dir = $_SERVER['DOCUMENT_ROOT'].'/images/';

Annars använd en relativ sökväg.

ok, tack. jag vet inte absoluta sökvägen från disken. får väl ta reda på den från hotellet.

men relativ gilar jag bättre. var det inte det jag hade? hur skriver jag den annars?

Mvh, Sebastian

bassebhuMedlem sedan nov. 20016 480 inlägg
#6

För övrigt så är det en Unix-server...

MatteMedlem sedan aug. 20002 975 inlägg
#7

Det är bättre att använda relativa sökvägar, då är det lättare att flytta sin sida/kod mellan olika servrar.

Relativa sökvägar är precis som i HTML.
Ligger filen i samma katalog som skriptet, eller i en underkatalog, så börjar du antingen med ./ eller ingenting, typ includes/conn.php eller ./includes/conn.php.
Ligger det i en katalog bredvid blir det att först gå ner en nivå ../includes/conn.php o.s.v. Det där kan du.

Det finns dock tillfällen då man är tvungen att använda absoluta sökvägar. T.ex om man inkluderar en fil i en annan fil, som i sin tur inkluderas i filer på olika nivåer på webbplatsen. Då måste man ha en absolut sökväg eftersom den utgår från huvudskriptets plats i filsystemet.
Det kan även finnas andra tillfällen då en absolut sökväg är nödvändig.

Ett enkelt sätt att kolla sin absoluta sökväg är att göra ett parse error. Då brukar man få sökvägen utskriven till sitt skript, om inte utskrift av felmeddelande är avstängt.
Jämför vad den ger gentemot vad $_SERVER['DOCUMENT_ROOT'] ger.

Men som sagt, använd om möjligt relativa sökvägar.

bassebhuMedlem sedan nov. 20016 480 inlägg
#8

ok, ska testa när jag kommer hem. bara en snabb fråga till. varför detta "./" om man ska ange i samma mapp/upp en nivå? Såg att du skrev "eller ./" men har det nån funktion?

Mvh, Sebastian

MatteMedlem sedan aug. 20002 975 inlägg
#9

En enkel punkt är den katalog man befinner sig i, så ./ betyder att man utgår från den katalog skriptet ligger i.
Samma sak om du inte har något alls före katalognamnet, då utgår det också från skriptets katalog.
Jag vet inte någon gång det skulle ha betydelse vilket.
De gånger man kan behöva använda punkt är när man ska köra en funktion som vill ha en katalog som parameter, och man vill ange befintlig katalog, då får man ange punkt som katalognamn, t.ex opendir('.')

bassebhuMedlem sedan nov. 20016 480 inlägg
#10

nej, har testat alla saker nu. får samma fel. permission denied? är det nåt med rättigheter eller inget stöd?

Warning: move_uploaded_file(bild.gif): failed to open stream: Permission denied in /home2/blabla/public_html/gallery/upload.php on line 59

Warning: move_uploaded_file(): Unable to move '/tmp/php3G2G6W' to 'bild.gif' in /home2/blabla/public_html/gallery/upload.php on line 59

Testade sista gången i samma mapp. gick inte heller =/

59 är som sagt:
if(is_uploaded_file($_FILES['userfile']['tmp_name']))
move_uploaded_file($_FILES['userfile']['tmp_name'],$upload_dir.$_FILES['userfile']['name']);

men eftersom jag kopierat scriptet rakt av från en som kör det så kan det ju inte vara fel i det. sökvägen jovisst, men tycker jag har testat både relativa, fysiska och psykiska.

Fler förslag?

SPiNMedlem sedan mars 20007 896 inlägg
#11

Det står ju där, grönt på, ehh, grönt. ;)

Permission denied. Du har helt enkelt inte rättigheter till att skapa filer på servern, genom PHP. :)

bassebhuMedlem sedan nov. 20016 480 inlägg
#12

hehe ja, jag tycker också det ;) men man förvånas ju aldrig. vissa felmeddelanden jag stött på förut har varit luriga så :P

har mailat hotellet.... :)

bassebhuMedlem sedan nov. 20016 480 inlägg
#13

Nu är biffen kirrad! Satte rättigheterna till 777 på mappen images. Hurra!

Tack alla!

132 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)