У меня есть этот код:
<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
вызов не привел ни к чему, он просто записал «+ foo +» в файл. <?php echo 42; ?>
вызов привел к выводу «42», который сейчас находится в том месте, где раньше был этот код.
Этот результирующий код HTML / JavaScript теперь отправляется клиенту, где он оценивается. alert
звонок работает, пока foo
переменная нигде не используется.
Весь код PHP выполняется на сервере еще до того, как клиент начнет выполнять любой из JavaScript. В ответе не осталось PHP-кода, с которым мог бы взаимодействовать JavaScript.
Чтобы вызвать некоторый код 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-logic, j boss, WebSphere
Я постараюсь объяснить это простым способом.
Клиентская сторона — это то, что пользователь видит / код, который виден в браузере.
Программирование на стороне клиента включает в себя HTML (HTML, HTML5, DHTML), CSS (CSS, CSS3) и JavaScript (JavaScript, ES5, ES6, ES7, TypeScript, JQuery, ReactJs, AngularJs, BackboneJs или любую другую интерфейсную среду JavaScript).
Программирование на стороне клиента фокусируется на том, «как будет выглядеть страница» и ее поведении в браузерах.
Программирование на стороне сервера включает в себя код, который предоставляет данные на стороне клиента. Пользователь никогда не сможет увидеть серверную часть.
Программирование на стороне сервера включает в себя язык программирования (Java, PHP, .Net, C #, C, C ++, NodeJS и т. Д.), Базу данных (SQL, Oracle, MySql, PostgreySql, No-Sql, MongoDB и т. Д.), Сторонний API (Rest, Soap ), Бизнес Логика.
Программирование на стороне сервера сосредоточено на том, «как сделать данные доступными для стороны клиента».
Клиентская сторона запрашивает данные или запрашивает хранение данных со стороны сервера через API, предоставляемый серверной стороной. Этот запрос и ответ данных выполняется с использованием протокола HTTP / FTP, такого как REST API, SOAP API.