Я хочу знать, могу ли я включить php
скрипты в javascript
[1] так же, как это можно сделать в html
[2]
server.php: <?php echo 'hello World'; ?>
client.js (или client.php, если необходимо):
function foo() { var i = <?php include('server.php'); ?> console.log( i ); }
Если это можно сделать, и если client.php
нужно использовать client.php
, я бы очень оценил минимальный пример с index.html/index.php
, так как я хотел бы видеть, как я буду включать client
сейчас, php
файл, а не javascript
Вы можете использовать буферизацию вывода для достижения чего-то подобного, хотя невозможно напрямую внедрить PHP-код в JS.
Пример:
server.php
<?php echo 'hello World'; ?>
client.php – (расширение .php позволяет анализировать теги PHP, но на самом деле выводит JS)
<?php header("Content-type: application/x-javascript"); // Or 'text/javascript' ob_start(); include( 'server.php'); $i = ob_get_contents(); ob_end_clean(); ?> function foo() { var i = '<?= json_encode( $i); ?>'; console.log( i ); }
Изменить: если файл server.php возвращает только простую строку, вы можете изменить свой код для client.php . Обратите внимание, как я сказал «return» вместо вывода. Если ваш сервер.php выводит что-либо, он будет отправлен в браузер как выходной (не то, что вы хотите). Кроме того, вы можете установить переменную в server.php, которая выводится в client.php или инкапсулирует ваш код в функцию:
server.php
<?php function js_output() { return 'hello world'; } ?>
client.php
<?php header("Content-type: application/x-javascript"); // Or 'text/javascript' ?> function foo() { var i = '<?php include( 'server.php'); echo addslashes( js_output()); ?>'; console.log( i ); }
Примечание. Также вы можете добавить вызов html_entities
или htmlspecialchars
.
Он должен быть .php-файлом. Вы должны установить это как первую строку в вашем client.php:
header("Content-type: text/javascript");
Затем вы можете создать такой файл и просто включить его и использовать в качестве обычного файла javascript. Таким образом, с <script>
, поскольку он теперь распознается как JavaScript
Проще всего было бы использовать client.php вместо client.js, так как ваш сервер будет автоматически отправлять .php-файл через PHP-интерпретатор. Вы технически можете перенастроить сервер, чтобы сделать это с файлами .js, но я бы не рекомендовал его.
Файл client.php должен включать эту строку, прежде чем что-либо выводится пользователю:
header("Content-type: text/javascript");
Что касается базового примера index.html / index.php:
<html> <head> <title>Example</title> <script type="text/javascript" src="client.php"></script> </head> <body> ... </body> </html>
Обновление: пример файла client.php:
<?php header("Content-type: text/javascript"); // This bit must come first! ?> var i = "<?php echo $somevar; ?>" // This is JavaScript code with some PHP embedded.
Чтобы внедрить PHP в файл, сервер должен передать его через парсер PHP, и он будет делать это только с использованием типов файлов, которые, как было сказано, содержат разметку PHP, то есть файлы .php. Вы могли бы также сказать, что сервер также разбирает js-файлы, но я не уверен, правильно ли будет установлен тип mime. Это также потребует изменения настроек сервера. Если вы вызываете javascript-файл .php, тип mime определенно будет неправильным. Самый совместимый способ сделать это – поставить javascript в html-файл (т. Е. Ваш .php-файл). Если вы хотите, чтобы количество javascript в ваших .php-файлах было минимальным, вы можете просто поместить переменные-назначения в файл .php и оставить все остальное в своем файле javascript.
server.php:
<script language="javascript"> var some_var = "<?php echo $SOME_VAR ?>"; </script> <script src="client.js" type="text/javascript">
client.js:
alert(some_var);
(Глобальная) переменная javascript some_var
будет установлена на значение, которое имеет переменная PHP $SOME_VAR
. Не забывайте кавычки при настройке строковых значений. Также, если код PHP содержит ошибки, вы можете заразить код javascript, поэтому при выполнении этого нужно много внимания.
У вас не может быть клиентская загрузка PHP. Единственный способ сделать это – иметь на сервере server.php
<html> <head> <script type="text/javascript"> function foo() { var i = <?php echo 'hello World'; ?> console.log( i ); } </script> </head> <body> </body> </html>
По существу, загрузка javascript в тело страницы. Или альтернативно.
<html> <head> <script type="text/javascript"> var i = <?php echo 'hello World'; ?> </script> <script type="text/javascript" src="client.js"> </head> <body> </body> </html>
И в client.js
function foo() { console.log( i ); }
по существу переменная i может быть загружена как глобальная переменная на странице
или, как предлагает другая публикация, masquerade php-файл как js.
Я протестировал это решение на PHP 5.5.
1. Создайте файл с именем myScript.php.
// содержание myScrpt.php:
<?php $fname = "Jason"; $lname = "Kent"; ?>
// содержимое test.php:
<!DOCTYPE html> <html> <head> <title>Include php Script</title> <script type="text/javascript"> <?php include 'myScript.php'; ?> </script> </head>
<h1>The result is:</h1> <?php echo "My full name is $fname $lname."; ?> </body> </html>
Мое полное имя – Джейсон Кент.