Как встроить PHP-скрипт в JavaScript? - PullRequest
1 голос
/ 22 ноября 2011

Я хочу знать, могу ли я включить 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, я был бы очень признателен за минимальный пример с index.html/index.php, поскольку я хотел бы посмотреть, как бы я включил client теперь, когда это php файл, а не javascript

Ответы [ 6 ]

4 голосов
/ 22 ноября 2011

Вы можете использовать буферизацию вывода для достижения чего-то похожего, хотя невозможно напрямую встраивать код 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 );
}

Edit: Если файл server.php вернет только простую строку, вы можете изменить свой код для client.php . Обратите внимание, как я сказал «возврат» вместо вывода - если ваш server.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.

2 голосов
/ 22 ноября 2011

Чтобы встроить 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, поэтому при этом следует соблюдать особую осторожность.

2 голосов
/ 22 ноября 2011

Самое простое, что можно сделать, это использовать 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.
2 голосов
/ 22 ноября 2011

Это должен быть файл .php. Вы должны установить это в качестве первой строки в вашем client.php:

header("Content-type: text/javascript");

Затем вы можете создать такой файл и просто включить его и использовать как обычный файл javascript. То же самое касается тега <script>, который теперь распознается как JavaScript

.
1 голос
/ 18 ноября 2014

Я тестировал это решение на PHP 5.5.
1. Создайте файл с именем myScript.php.

// myScrpt.php content:

<?php 
$fname = "Jason";
$lname = "Kent";
?>
Создайте файл с именем test.php.

// 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> 
Когда вы откроете test.php в браузере, вы получите:

Меня зовут Джейсон Кент.

0 голосов
/ 22 ноября 2011

У вас не может быть клиента, загружающего 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 );
}

по существу переменная я могу быть загружена как глобальная переменная на странице

или как предлагает другой постзамаскируйте php-файл как js.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...