2013-04-18 4 views
4

Я пытаюсь загрузить файл на ftp.Внимание: move_uploaded_file() не удалось открыть поток

вот мой код

$jname= "Accounts of Biotechnology Research"; 
    if (!is_dir('/Trade/upload/ '.$jname)) { 

     mkdir('/Trade/upload/ '.$jname); // line 63 
    } 
    move_uploaded_file($_FILES["submission_file"]["tmp_name"], "/Trade/upload/$jname/" . $dup_name); // line 67 

Trade представляет собой папку внутри папки public_html.

Когда я загрузив файл, он дает мне предупреждение, как,

Warning: mkdir() [function.mkdir]: No such file or directory in /home/my_username/public_html/Trade/upload.php on line 63 

Warning: move_uploaded_file(/Trade/upload/Accounts of Biotechnology Research/76164762-sm.pdf) [function.move-uploaded-file]: failed to open stream: No such file or directory in /home/my_username/public_html/Trade/upload.php on line 67 

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phphZXp0O' to '/Trade/upload/Accounts of Biotechnology Research/76164762-sm.pdf' in /home/my_username/public_html/Trade/upload.php on line 67 
+1

s темп на ''/Trade/upload/''опечатка? – Amir

+0

Возможно, у вас нет этого каталога. Торговля/загрузка или у вас нет разрешения на запись. –

+1

У вас есть каталог '/ Trade/upload /' уже создан? –

ответ

7

Первый: У вас есть место здесь mkdir('/Trade/upload/ '.$jname);. Предположим, что у вас должно быть mkdir('/Trade/upload/'.$jname); (то же самое для is_dir)

Второе: Убедитесь, что вы можете написать в Trade/upload.

В-третьих (и я полагаю, что это реальная проблема):

Похоже, что вы пытаетесь загрузить в каталог с полным путем: /home/my_username/public_html/Trade/upload/, но ваш код будет пытаться создать каталог с полным путем : /Trade/upload/. Вам нужно изменить

if (!is_dir('/Trade/upload/ '.$jname)) {  
    mkdir('/Trade/upload/ '.$jname); // line 63 
} 

в

if (!is_dir('upload/'.$jname)) {  
    mkdir('upload/'.$jname); // line 63 (or maybe there should be Trade/upload, but suppose current working dir will be /home/my_username/public_html/Trade, so only upload/) 
} 

Другой вариант, чтобы заставить mkdir создавать каталоги рекурсивно:

mkdir('/Trade/upload/'.$jname, 0755, true); 

Но в этом случае файлы будут загружены в /Trade/upload/... вместо от /home/my_username/public_html/Trade/upload/...

+0

в моем разрешении –

4

Есть 2 вещи, которые вы должны знать на основе сообщений об ошибках, которые вы получили.
Я предполагаю /Trade не корневой путь на вашей машине, так как это ясно в ошибке, что ваш фактический путь /home/my_username/public_html/Trade/, поэтому первая корректировка должна быть

$root_path = "/home/my_username/public_html/Trade/upload/";  

Вторая корректировка Я хотел бы предложить это что вы избегаете с пространством имен путей в них:

$jname= "Accounts of Biotechnology Research"; //could be changed to 
$jname= "Accounts_of_Biotechnology_Research"; //$jname = str_replace(" ","-",$jname) OR 
$jname= "Accounts-of-Biotechnology-Research"; //$jname = str_replace(" ","-",$jname)  

Наконец принять к сведению символ пробела в следующих строках, они влияют на вас окончательный результат:

if (!is_dir('/Trade/upload/ '.$jname)) { //AND 
    mkdir('/Trade/upload/ '.$jname); 
} 

Обратите внимание на пробел между upload/ '.$jname в обеих строках.
Надеюсь, это поможет.

Смежные вопросы