Как запустить PHP в Javascript (браузере)?

Но ждать! Обещаю, это не еще один из тех вопросов. Это один из тех поощряемых вопросов, на которые я сам отвечал, и возник в результате некоторых экспериментов, которые я провел.

Как запустить PHP на Javascript? Я не спрашивать о запуске PHP на сервере, а затем отправляю полученную строку в браузер как Javascript. Я буквально говорю о парсинге Javascript и запуске PHP.

Это может быть полезно во многих местах:

  • Экспресс-приложение Node.js, которое должно использовать модуль PHP.
  • Небольшой REPL для браузера, которому не требуется целая виртуальная машина на каждый экземпляр. Идеально подходит для изучения PHP.
  • Создание шаблонизатора для статического конструктора сайта.

Я поискал и нашел php-parser и babel-preset-php, но ничего не запускал. В идеале я ищу что-то подобное, хотя через Google / SO / etc ничего не нашел:

// No server needed, "just" Javascript parsing PHP
alert(php(`<?= "Hello world" ?>`));

Обновлено: если вы знаете способ лучше, чем мой собственный, пожалуйста, поделитесь им! Мне очень любопытно, что думает сообщество.

вы просто рассылаете спам в своем блоге.

user10226920 18.11.2018 06:54

Это не было моим намерением, ссылка на мой блог удалена! Я думаю, что этот вопрос / ответ может стоять сам по себе и может быть интересен сообществу :)

Francisco Presencia 18.11.2018 06:56
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
2
113
2

Ответы 2

Это возможно! Используя две библиотеки, упомянутые в вопросе, проанализируйте babel-preset-php и повторно используйте некоторые части для преобразования PHP в Javascript, а затем оцените Javascript. Вот рабочая демонстрация, не стесняйтесь писать базовый PHP в <textearea> и нажимать run, чтобы запустить PHP в браузере:

const $ = sel => document.querySelector(sel);
$('#horrible').addEventListener('submit', e => {
  e.preventDefault();
  eval($('#horrible textarea').value);
});
body, html {
  margin: 0;
}

textarea {
  line-height: 1.5;
  margin: 0;
  height: 2.1em;
  padding: .3em .6em;
  border: 1px solid #ccc;
  background-color: #fff;
  border-radius: .2em;
  transition: all 0.3s;
  width: 90%;
}

button {
  display: inline-block;
  text-align: center;
  margin: 0;
  padding: .3em .9em;
  vertical-align: middle;
  background: #0074d9;
  color: #fff;
  border: 0;
  border-radius: .2em;
  width: auto;
  user-select: none;
  margin: .3em 0;
  cursor: pointer;
  transition: all 0.3s;
  border-radius: .2em;
  height: auto;
  box-shadow: 0 0 rgba(0,0,0,0) inset;
}
<form id = "horrible">
<textarea style = "min-height:150px">const vars = { icon: &#x27;&#x1F389;&#x27; };
const out = php(&#x60;&#x3C;?= &#x22;for fun! &#x22;.$icon ?&#x3E;&#x60;, vars);
alert(out);</textarea>
<button data-tooltip = "Are you sure? Like, 100%? There is no coming back">EVAL()</button>

<script src = "https://francisco.io/blog/running-php-in-javascript/php.min.js"></script>

Вот фактический фрагмент кода, использованный для создания файла php.js, указанного выше:

import parser from 'php-parser';
import translator from './translator';
import generator from '@babel/generator';

const run = (code, opts) => {
  // Make a closure so that `out` doesn't collide with the PHP variables:
  let out = '';
  // Define `echo` since it's used in the transpiled JS code for some reason
  opts.echo = opts.echo || (str => out += str);
  // Pretend this is safe. Pro tip: IT IS NOT SAFE
  new Function(...Object.keys(opts), code)(...Object.values(opts));
  return out;
}

export default function (src, opts = {}) {
  const ast = new parser().parseCode(src);
  const file = translator.translateProgram(ast);
  const code = generator(file).code;
  return run(code, opts);
};

если вы хотите написать что-то на jsvascript. Тогда необходимо, чтобы код javascript был в файле php, т.е. если имя файла - temp.php

и код javascript должен быть в теге скрипта.

например. test.php (ваше имя файла php)

<html>
    <head>
        <script>
            function myFunc(){
                alert('<?php echo date("Y/m/d"); ?>');
            }

        </script>
    </head>
</html>

Приведенный выше код предупреждает о дате. Вышеуказанная дата является функцией даты php.

Первоначально php-сервер выполняет вышеуказанный код и обрабатывает JS-код как простой текст.

и будет выглядеть, как показано ниже, когда дело доходит до клиента / браузера

<html>
    <head>
        <script>
            function myFunc(){
                alert("2018/06/30");
            }

        </script>
    </head>
</html>

Вопрос не в том, чтобы запустить PHP на сервере. Обычно разработчики умеют это делать.

Madhur Bhaiya 18.11.2018 07:10

Я понимаю, что подобный, но другой вопрос задавали тысячи раз раньше, но, пожалуйста, перечитайте его. Это не из тех! Я просто выделил разницу. Я спрашиваю, как разбирать и запускать PHP в Javascript. Я также даю собственный ответ о том, как это сделать.

Francisco Presencia 18.11.2018 07:11

Кроме вашего ответа не «проанализируйте и запустите PHP в Javascript». Ваш PHP работает на сервере и выводит Javascript.

user149341 18.11.2018 07:57

Другие вопросы по теме