2012-06-08 10 views
11

Próbuję zmusić PHP do przeniesienia przesłanego pliku z katalogu tmp do stałego miejsca na moim serwerze internetowym. Wydaje się dość proste, ale ja dostaję ten błąd:PHP: move_uploaded_file() nie udało się otworzyć strumienia: Brak takiego pliku lub katalogu

Unable to move 'C:\UniServer\tmp\php3F62.tmp' to 'static/images/slides/1/1.jpg'

Dość prosta, prawda? Nie można znaleźć folderu docelowego.

Moje pytanie brzmi: Jak mogę wskazać pożądany katalog docelowy?

Czy odniesienie odnosi się do pozycji skryptu na serwerze? Czy jest to względny adres URL? Lub PHP DOCUMENT_ROOT? Lub system plików OS? Albo coś innego?

nie mogę znaleźć odpowiedzi w dokumentacji PHP czy rzeczywiście w którymś z podobnych pytania tutaj na SO ..

Czy ktoś może pomóc? Dzięki.

+0

Jest to pozycja skryptu na serwerze. Najlepiej używać bezwzględnej ścieżki przez cały czas –

+2

używać stałej 'DIRECTORY_SEPARATOR' na ścieżkach, aby uczynić ją niezależną od platformy. –

+0

Jeden często napotyka ten błąd i szybko go rozwiązuje, wykonaj następujące kroki: https://stackoverflow.com/a/36577021/2873507 –

Odpowiedz

26

Prosty sposób, aby śledzić ścieżki jest po prostu określić bezwzględną ścieżkę w index.php

define ('SITE_ROOT', realpath(dirname(__FILE__))); 

Następnie wystarczy użyć go lubię:

move_uploaded_file($_FILES['file']['tmp_name'], SITE_ROOT.'/static/images/slides/1/1.jpg'); 
+0

Tak też to robię. Jest to lepsze niż użycie katalogu głównego, ponieważ w ten sposób możesz mieć swoją aplikację w podkatalogu –

+0

To jest właściwe rozwiązanie, dzięki!(Niepokojące jest to, że kilka osób myślało, że DIRECTORY_SEPARATOR pomoże, chociaż: - /) –

+0

Ive nigdy go nie użyłem, id użyję go tylko wtedy, gdy mam zamiar wypisać ścieżkę do użytkownika. Dzięki za przyjęcie :) –

0

Jest to z pozycji skryptu na serwerze! A ponadto trzeba mieć uprawnienia do zapisu w tym folderze:

'static/images/slides/1/1.jpg' 

Zamiast tego lepiej jest użyć ścieżki bezwzględnej ten sposób:

'C:\UniServer\***\static\images\slides\1\1.jpg 

bezwzględną ścieżkę.

+2

PHP akceptuje zarówno \ i/jak i prawidłowe separatory ścieżek we wszystkich systemach operacyjnych. –

+0

@DjangoReinhardt Dzięki za informacje, ale po to, aby być bardzo ostrożnym, znając system operacyjny. :) –

+0

Jaki jest powód downwingu? –

2

miałem ten sam problem z moim przesyłaniem. Zobacz mój przykład i może ci to pomoże.

Plik, który utworzyłem nazywa się "uploads".

$uploads_dir = 'uploads/'; 
$name = $_FILES['userfile']['name']; 
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) 
{  
    //in case you want to move the file in uploads directory 
    move_uploaded_file($_FILES['userfile']['tmp_name'], $uploads_dir.$name); 
    echo 'moved file to destination directory'; 
    exit; 
} 
0
$destination = dirname(dirname(dirname(dirname(__FILE__))))."/runtime/tmp/"; 
chown($destination, 0755); 
move_uploaded_file($info['tmp_name'], $destination.$info['name']); 

To jest moje rozwiązanie, po prostu użyć mkdir utworzyć katalog umieścić moje zdjęcie, które chcesz przenieść. Szkoda, że ​​to pomaga.

Powiązane problemy