У меня есть этот код:
<script type="text/javascript"> var foo = 'bar'; <?php file_put_contents('foo.txt', ' + foo + '); ?> var baz = <?php echo 42; ?>; alert(baz); </script>
Почему это не записывает «бар» в мой текстовый файл, но предупреждает «42»?
NB: Более ранние изменения этого вопроса были явно о PHP на сервере и JavaScript на клиенте. Суть проблемы и решений одинакова для любой пары языков при работе на клиенте, а другая на сервере. Пожалуйста, примите это во внимание, когда увидите ответы о конкретных языках.
Ваш код разделен на две полностью отдельные части, на стороне сервера и на стороне клиента .
| ----------> HTTP request | +--------------+ | +--------------+ | | | | | | browser | | | web server | | (JavaScript) | | | (PHP etc.) | | | | | | +--------------+ | +--------------+ | client side | server side | <---------- HTML, CSS, JavaScript |
Обе стороны общаются через HTTP-запросы и ответы. PHP выполняется на сервере и выводит код HTML и, возможно, JavaScript, который отправляется как ответ клиенту, где интерпретируется HTML, и выполняется JavaScript. Как только PHP завершит вывод ответа, сценарий заканчивается, и на сервере ничего не произойдет, пока не появится новый HTTP-запрос.
Пример кода выполняется следующим образом:
<script type="text/javascript"> var foo = 'bar'; <?php file_put_contents('foo.txt', ' + foo + '); ?> var baz = <?php echo 42; ?>; alert(baz); </script>
Шаг 1, PHP выполняет весь код между тегами <?php ?>
. В результате получается следующее:
<script type="text/javascript"> var foo = 'bar'; var baz = 42; alert(baz); </script>
file_put_contents
не file_put_contents
ни к чему, он просто написал «+ foo +» в файл. <?php echo 42; ?>
<?php echo 42; ?>
вызвал вывод «42», который теперь находится на том месте, где раньше был этот код.
Этот итоговый код HTML / JavaScript теперь отправляется клиенту, где он получает оценку. Звонок работает, а переменная foo
нигде не используется.
Весь код PHP выполняется на сервере, прежде чем клиент даже начнет выполнение какого-либо JavaScript. В ответе, с которым может взаимодействовать JavaScript, нет кода PHP.
Чтобы вызвать некоторый код PHP, клиент должен будет отправить новый HTTP-запрос на сервер. Это может произойти с использованием одного из трех возможных способов:
Вот более подробный изложение этого метода
Вы также можете использовать JavaScript, чтобы браузер открыл новую страницу, используя window.location
или отправьте форму, эмулируя возможности 1. и 2.
Чтобы определить, почему PHP- код не работает в JavaScript- коде, нам нужно понять, что такое клиентский и серверный язык и как они работают.
Серверные языки (PHP и т. Д.) : Они извлекают записи из баз данных, сохраняют состояние через HTTP- соединение без состояния и выполняют много вещей, требующих безопасности. Они находятся на сервере, эти программы никогда не имеют исходного кода, открытого пользователю
Изображение
Таким образом, вы можете легко увидеть, что серверный язык обрабатывает HTTP-запрос и обрабатывает его, а поскольку @deceze говорит, что PHP выполняется на сервере и выводит некоторый HTML-код и, возможно, код JavaScript, который отправляется как ответ клиенту, где интерпретируется HTML, и JavaScript выполняется.
Хотя, с другой стороны, язык клиентской стороны (например, JavaScript) находится в браузере и работает в браузере, клиентские сценарии обычно относятся к классу компьютерных программ в Интернете, которые выполняются на стороне клиента, в веб-браузере пользователя, вместо этого серверной стороны .
JavaScript видна пользователю и может быть легко изменена, поэтому для обеспечения безопасности мы не должны полагаться на JavaScript.
Поэтому, когда вы делаете HTTP- запрос на сервере, чем сервер, сначала внимательно читает файл PHP, чтобы узнать, есть ли какие-либо задачи, которые необходимо выполнить, и отправить ответ на клиентскую сторону и снова, как @deceze сказал * Как только PHP завершит вывод ответа , сценарий заканчивается, и на сервере ничего не произойдет, пока не появится новый HTTP- запрос. *
Источник изображения
Итак, что мне делать, если мне нужно вызвать PHP? Это зависит от того, как вам это нужно: либо перезагружая страницу, либо используя вызов AJAX.
Хорошо для чтения:
Ваш Javascript будет выполняться на клиенте, а не на сервере. Это означает, что foo
не оценивается на стороне сервера, и поэтому его значение не может быть записано в файл на сервере.
Лучший способ подумать об этом процессе – это как будто вы генерируете текстовый файл динамически. Текст, который вы генерируете, становится исполняемым кодом после того, как браузер интерпретирует его. Только то, что вы размещаете между тегами <?php
оценивается на сервере.
Кстати, создание привычки встраивать случайные фрагменты PHP-логики в HTML или Javascript может привести к серьезному запутанному коду. Я говорю от болезненного опыта.
В веб-приложении каждая задача выполняется в виде запроса и ответа.
Программирование на стороне клиента – это html-код с Java-скриптом и его фреймворками, библиотеки выполняются в Internet Explorer, Mozilla, Chrome-браузерах. В сценарии java серверные серверные сервлеты выполняются в Tomcat, web-логике, j боссе, WebSphere severs