путь назначения для файла move_uploaded_file в php - PullRequest
5 голосов
/ 30 ноября 2011

Мне нужно знать, что использовать для целевого пути для функции PHP move_uploaded_file. (см. http://php.net/manual/en/function.move-uploaded-file.php)

Прямо сейчас у меня есть код, который отлично работает. Корневой каталог моего домена содержит следующие элементы (среди прочих):
Загрузка <-это папка <br> add-photo-submit.php <-это файл PHP, который использует move_uploaded_file <br>

В add-photo-submit.php у меня есть следующая строка кода:

$target_path = "uploads/" . basename($_FILES['uploadedFile']['name']);

$ target_path используется в качестве параметра назначения для функции. Это работает очень хорошо, когда я получаю доступ к файлу через www.mydomain.com/add-photo-submit.php

Однако недавно я изменил файл .htaccess, чтобы удалить .php и добавить косую черту. Теперь файл PHP доступен по адресу www.mydomain.com/add-photo-submit/. Я думаю, что файл PHP интерпретирует целевой путь как "www.mydomain.com/add-photo-submit/uploads/filename.jpg"

Я пытался использовать абсолютный путь, но там говорилось, что у меня нет разрешения ...

В будущем я бы хотел, чтобы мой корневой каталог был настроен так:
корень
-admin (папка)
-add-фото-submit.php
-uploads

Какую систему координат имеет move_uploaded_file?

Ответы [ 4 ]

27 голосов
/ 30 ноября 2011

Вы должны использовать document_root, чтобы получить абсолютный путь, подобный этому:

$target_path = $_SERVER['DOCUMENT_ROOT'] . "/uploads/" . basename($_FILES['uploadedFile']['name']);
3 голосов
/ 30 ноября 2011

Операции PHP с локальными именами файлов не имеют представления о том, что mod_rewrite сделал с вашими URL-адресами, и имеют дело только с реальными необработанными путями файловой системы.Вы можете сделать так, чтобы mod_rewrite превратил ваш простой example.com/index.php в отвратительный example.com/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/yz, а PHP все равно работал бы в том же физическом каталоге на сервере.

Если сценарий PHP находится на /home/sites/example.com/html/index.php, и выиспользуйте uploads/example.jpg в качестве пути перемещения, тогда PHP попытается поместить это изображение в /home/sites/example.com/html/uploads/example.jpg, независимо от того, какой был запрошенный URL.

1 голос
/ 03 декабря 2016

Мы можем использовать dirname(__FILE__) вместо корня сервера, объявить ниже строку в любом из root файла (index.php)

$_SESSION["uploads_base_url"]=dirname(__FILE__); 

, и теперь вы можете использовать это в любых файлахгде требуется загрузка.

echo $uploads_base_url=$_SESSION["uploads_base_url"];
1 голос
/ 19 марта 2015

Или используйте

$target_path = "../uploads/" . basename($fileUpload['name']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...