PHP - Получить относительный путь к файлу / папке - PullRequest
0 голосов
/ 20 февраля 2019

С JavaScript, если у вас установлен тег ввода, подобный следующему ...

<input type="file" multiple webkitdirectory directory />

Вы можете получить относительный путь к выбранному файлу, выполнив это ...

document.getElementsByTagName('INPUT')[0].files[0].webkitRelativePath

Мой вопрос: как вы можете получить относительный путь к файлу из тега ввода, как это с PHP?С помощью PHP вы можете получить имя файла, тип, размер, но как узнать его относительный путь?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

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

Но вы могли бы потенциально использовать различные методы (комбинация JavaScript, делающего асинхронный запрос к серверу - AJAX или другое поле, может быть скрыто, сохраняя информацию о пути к файлу) для передачи информации о пути на сервер.

0 голосов
/ 20 февраля 2019

Относительные каталоги не работают так, как вы думаете, они должны в PHP (в соответствии с вашим мышлением JavaScript) - в основном потому, что PHP это серверная и теоретически может получить доступ к любому файлу в операционной системе (кроме случаев, когда он находится в тюрьме и т. д.). Наиболее близким вы найдете что-то вроде $_SERVER['DOCUMENT_ROOT'], которое даст вам относительный путь к веб-корню -Однако, если вы используете PHP на основе клиента - "относительного корня" нет - В cli вы просто используете ./ (или ничего), ../, /, чтобы сообщить php " относится к в той же директории, что и скрипт "IE

./directory/yourfile.txt   //This starts in the SAME directory as the php file

../directory/yourfile.txt  // This goes up one directory, and then you can drill back down.

../../../directory/directory/directory/file.txt  // Just like above, but up 3 directories

/directory.file.txt // Starts from the server root -- IE /var/www/etc/etc/etc

Кроме использования этих методов, вы можете написать свой собственный способ обработки этого с помощью своих собственных методов и т. д. -Есть много школ, хотя и по этому вопросу.Некоторые говорят, что использование абсолютных путей - это путь ... Но другие утверждают, что для переносимости относительный - это путь.На самом деле это зависит от вашей программы и от того, для чего вы ее используете. Будет ли она развернута и т. Д. Если она последняя и основана на сети, то достаточно $_SERVER['DOCUMENT_ROOT'], но вы должны структурировать свою программу для создания классов,контроллеры, модули и т. д. легко доступны при кодировании.(поэтому напишите методы для работы с каталогами)


ОБНОВЛЕНИЕ для вашего комментария

Вы спросили, можно ли передать это php, и ответ- да, и нет.

Да, если страница уже загружена и вы хотите отправить информацию как часть действия (форма отправки / вызов AJAX)

Да, если вы ужезагрузили страницу и сохранили файл cookie с этой информацией на предыдущей странице / сеансе

Нет, если пользователь никогда не был на странице и первая загрузка страницы уже произошла, и никаких других действий не ожидаетсятакие как AJAX или отправка форм.

Исходя из того, что вы спрашиваете, вы можете просто:

var mypath = document.getElementsByTagName('INPUT')[0].files[0].webkitRelativePath

 $.post("send_path_to_php.php", {path: mypath}, function(result){
     alert(result);  // result of php page response
 });

Это отправит var mypath в php файл с именем send_path_to_php.php.Файл php сможет извлечь $_POST['path] Затем вы сделаете все, что вы хотите в указанном php - Все, что вы echo / return будет в обратном вызове result

...