move_uploaded_file () не может открыть поток

Я пытаюсь загрузить файлы через Pycurl через POST, используя скрипт PHP на принимающей стороне. По какой-то причине часть PHP вызывает ошибку. Я переработал это до двух коротких тестовых сценариев.

import pycurl UPLOADURL = "http://127.0.0.1/~nevon/receive.php" #URL to the PHP script PATH = "/home/nevon/Desktop/testfile" #path to the file I'm trying to upload c = pycurl.Curl() c.setopt(c.POST, 1) c.setopt(c.URL, UPLOADURL) c.setopt( c.HTTPPOST, [("uploaded", (c.FORM_FILE, PATH))] ) c.perform() c.close() 

receive.php:

 <?php ini_set('display_errors','On'); $target = getcwd()."/upload/"; $target = $target . basename( $_FILES['uploaded']['name']) ; $ok=1; if (move_uploaded_file($_FILES['uploaded']['tmp_name'], $target)) { echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded"; } else { echo "Something went wrong."; } ?> 

Ошибки, которые я получаю при тестировании:

 Warning: move_uploaded_file(/home/nevon/public_html/upload/testfile): failed to open stream: No such file or directory in /home/nevon/public_html/receive.php on line 7 Warning: move_uploaded_file(): Unable to move '/tmp/phpevKFCC' to '/home/nevon/public_html/upload/testfile' in /home/nevon/public_html/receive.php on line 7 

Это не похоже на проблему с разрешениями, но тем не менее я проверил разрешения как каталога загрузки, так и / tmp. Я также проверил, что это не проблема с ограничением open_basedir.

В руководстве PHP по move_uploaded_file () говорится следующее:

move_uploaded_file () обеспечивает безопасность этой операции, позволяя перемещать только файлы, загруженные через PHP.

Поскольку я загружаюсь через Python с помощью Curl, я решил, что это может быть проблемой. Но разве не должно быть другого сообщения об ошибке, если это так? Если это действительно проблема, что я могу сделать вместо этого? Я не очень часто использовал PHP много лет, поэтому вы можете сказать, что я немного ржавый.

Я не уверен, что это актуально, но на всякий случай, я тестирую это на Ubuntu 10.10 с apache 2.2.16, PHP 5.3.3 и Python 2.6.6.

EDIT: сюжет сгущается! Человек в Twitter взял мой PHP-скрипт и положил его на свой сервер, чтобы узнать, может ли он выяснить, в чем проблема. Он отлично работал для него при загрузке через обычную форму PHP / HTML. Поэтому я указал свой сценарий Python на свой PHP-скрипт, и внезапно все получилось просто отлично. Так что теперь мне интересно, что случилось с моей стороны …? Как устранить эту проблему?

Ваш скрипт выглядит в порядке. Это явно проблема с $target directory. Сделайте 10000% уверенным, что каталог / загрузка уже существует. move_uploaded_file() не может создать его для вас.