PHP в Javascript: dirname и document_root
У меня есть небольшая проблема. Я работаю над проектом, и я получил свой рут, затем я получил 2 папки: website1
а также website2
,
website1
это панель персонала, где включен скрипт выгрузки (где эта проблема). website2
это сайт, который увидит "клиент". Здесь загружены все загруженные изображения, PDF-файлы и т. Д.
Итак, у меня есть несколько заметок, прежде чем я начну:
- Я не могу использовать PHP в моем Javascript. Javascript находится в файлах.js, а не в моем.php.
- Я не могу сделать это по моему AJAX-запросу, поскольку что-то на стороне клиента должно быть сделано правильно, чтобы увидеть изображение.
В общем, я в website1
и когда я загружаю файл (с DropzoneJS ( http://www.dropzonejs.com/)), он выполняет запрос AJAX. Здесь он должен загрузить файл в каталог в website2
, В website1
Я должен увидеть это изображение после загрузки его в тег IMG.
Итак, в PHP я получил это:
$uploadPath = filter_input(INPUT_POST, 'uploadPath');
$uploadPath = dirname(getenv('DOCUMENT_ROOT')) . '/' . $uploadPath;
Это работает, и файл загружается в этот каталог. $uploadPath
это (в Javascript, отправленный как параметр POST в запросе AJAX):
/SITE2/assets/uploads/
Теперь мне нужно перевести dirname
а также getenv('DOCUMENT_ROOT')
в Javascript. Я старался document.location.hostname
но это возвращает другое значение, чем getenv('DOCUMENT_ROOT')
,
document.location.hostname
: 127.0.0.1getenv('DOCUMENT_ROOT')
: D: / xampp / htdocs
Как я могу получить то же значение, что и getenv('DOCUMENT_ROOT')
в JavaScript
3 ответа
В php файле вы можете создать скрипт с переменной JavaScript следующим образом:
<script>
var DOCUMENT_ROOT = "<?= getenv('DOCUMENT_ROOT') ?>";
</script>
другой вариант - иметь ваш JavaScript-файл в виде PHP-скрипта, тогда вы можете использовать PHP-код внутри.
У вас есть два варианта, но я предупреждаю, что отправка фактического пути к файлу на сервере / диске клиентской стороне - плохая идея.
- Используйте Ajax, чтобы клиент отправлял запрос как
$.ajax({url: "getdir.php", success: someJSFuntion } );
- Измените ваш файл JavaScript на файл ".php", а затем включите код прямо там.
Нет спецификаций, в которых говорится, что ваш JS-файл не может быть файлом ".php". Таким образом, вы бы ссылку на него, как это:
<script type="text/javascript" src="/js/myjs.php"></script>
И это позволит вам использовать PHP непосредственно в вашем файле JS.
Проверьте php.js для порта JavaScript dirname
...
Что касается getenv('DOCUMENT_ROOT')
Вы не можете получить значение этой переменной через JavaScript. Причиной этого является "местоположение" файла JavaScript на стороне клиента, которое ничего не говорит о его фактическом расположении на сервере. Лучшее, что вы можете сделать, - это получить родительский каталог файла или имя домена.
Например:
http://example.com/path/to/file
"DOCUMENT_ROOT", что касается JavaScript, это...
/path/to
Кажется очень неправильным даже предполагать необходимость иметь доступное на стороне сервера расположение файла для JavaScript. Я бы просто использовал конкретный URL-запрос, который указывает, какое местоположение использовать, или чтобы отправить местоположение обратно с ответом AJAX, поскольку вы можете добавить туда все, что вам нужно.
{
"document-root": "/SITE2/assets/uploads/",
"normal-response": {
...
}
}
И тогда везде, где вы обычно используете то, что обычно получается, это использование...
// For example
var response = JSON.parse (request.responseText);
// Normal response
console.log (response['normal-response'][...]);
// Document Root
console.log (response['document-root']);