Мне нужно знать, что использовать для пути назначения для функции move_uploaded_file PHP. (см. http://php.net/manual/en/function.move-uploaded-file.php )
Прямо сейчас у меня есть код, который отлично работает. Корневой каталог моего домена содержит следующие элементы (среди прочих):
uploads <-this – это папка
add-photo-submit.php <-this – это файл PHP, в котором используется move_uploaded_file
В 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?
Вы должны использовать document_root для получения абсолютного пути следующим образом:
$target_path = $_SERVER['DOCUMENT_ROOT'] . "/uploads/" . basename($_FILES['uploadedFile']['name']);
Операции с локальными именами 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.
Или используйте
$target_path = "../uploads/" . basename($fileUpload['name']);
Мы можем использовать dirname(__FILE__)
вместо корневого сервера, объявляющего ниже строки в любом из файлов root (index.php)
$_SESSION["uploads_base_url"]=dirname(__FILE__);
и теперь вы можете использовать его в любых файлах, где требуется загрузка.
echo $uploads_base_url=$_SESSION["uploads_base_url"];