是否可以从PHP脚本中包含并调用JavaScript函数?怎么做?

是否可以从PHP脚本中包含并调用JavaScript函数?怎么做?,php,javascript,Php,Javascript,我不知道我将如何实现这一点,但是 我有一个服务器端的PHP CLI脚本。它将从命令行运行。我的PHP脚本需要调用JavaScript库中的函数并捕获返回值。我需要找到一种运行JavaScript服务器端的方法。我怎样才能做到这一点 解决方案: 使用,你可以。首先。然后,假设您的脚本如下所示: PHP: 结果是: $ php ./myscript.php Response from javascript: command line arguments 除非您谈论的是某种形式的客户端PHP或服务器

我不知道我将如何实现这一点,但是

我有一个服务器端的PHP CLI脚本。它将从命令行运行。我的PHP脚本需要调用JavaScript库中的函数并捕获返回值。我需要找到一种运行JavaScript服务器端的方法。我怎样才能做到这一点

解决方案: 使用,你可以。首先。然后,假设您的脚本如下所示:

PHP:

结果是:

$ php ./myscript.php
Response from javascript:
command
line
arguments

除非您谈论的是某种形式的客户端PHP或服务器端JavaScript,否则您所指的将不会起作用

PHP在服务器端执行

JavaScript在客户端执行

一个不能对另一个“调用方法”,因为在客户端调用JavaScript之前,PHP已经执行了


实现类似功能的唯一方法是为JavaScript提供某种执行方式,然后通过AJAX调用将方法的结果发布回服务器。

PHP只能执行预处理函数,因此我认为在页面中调用JavaScript函数的唯一方法是打印JavaScript调用:

?>
<script>
 functionToCall();
</script>
<?PHP
?>
函数调用();

PHP在服务器上执行,并将输出发送到浏览器。浏览器执行PHP提供的脚本。不,PHP不能调用JavaScript函数-它只能为浏览器提供包含浏览器将执行的JavaScript的页面


此脚本可能包含一个AJAX回调,它告诉浏览器向服务器PHP脚本发起一个新请求,但这构成了对服务器的一个单独的、不同的请求。

脚本是否需要运行客户端?您可以编写一个函数,在页面加载后立即运行并调用JS库,然后通过XHR调用将返回值发送到脚本。您还可以设置一个超时来运行函数,并在指定的时间段后执行此操作

如果您想让它工作,您必须使用Ajax通过JavaScript启动调用

我是这样做的:

var result = null;
var scriptUrl = "your-php-page.php";
$.ajax({
   url: scriptUrl,
   type: 'get',
   dataType: 'html',
   async: false,
   success: function(data) {
       result = data;
   }
});
return result;
首先,创建一个PHP文件,完成所有需要它完成的工作,然后让它回显一个简单的结果集。比如:

echo 'true';
关键是要简单。如果您需要的不仅仅是用空间、管道或彗差描绘每个结果,那么您可以稍后将其分解为一个数组

其次,需要使用ajax进行javascript调用。我是这样做的:

var result = null;
var scriptUrl = "your-php-page.php";
$.ajax({
   url: scriptUrl,
   type: 'get',
   dataType: 'html',
   async: false,
   success: function(data) {
       result = data;
   }
});
return result;

然后,您可以对返回的数据执行任何需要的操作。如果需要,您甚至可以将其发送到另一个PHP页面。

从技术上讲,您可以随心所欲

  • 找到一个命令行JS解释器,这可能是一个很好的方法
  • 制作一个接受输入并生成输出的JS脚本
  • 开始做你在php中正在做的任何事情
  • 抛出一个
    $output=system('./js解释器-param value',$retval)或类似
  • 处理数据
编辑:似乎非常适合您的需要:

预定义属性

在shell中执行的脚本可以访问顶级对象的一些附加属性。 论据

arguments对象是一个数组,包含调用shell时在命令行中给定的所有参数的字符串


我想这就是你要找的。在PHP中使用JavaScript与PECL和SpiderMonkey

这个例子甚至还没有接近测试,但我认为应该引导您朝着正确的方向前进

-- funcs.js
function add(a,b) {
  return a +b;
}

-- use-js-funcs.php
<?php

// create JavaScript context
$js = new JSContext();

$js_code = file_get_contents('func.js');

// define Script code
$js_code.= "\n add(5)";

// evaluate script and display result, 
// my guess is that evaluateScript returns the
// result of the last statement that was executed
echo $js->evaluateScript($script);
?>
--funcs.js
功能添加(a、b){
返回a+b;
}
--使用-js-funcs.php

你到底为什么需要这个?很难找到这个特定JavaScript库的PHP等价物。好的。特定的JS库是什么?JavaScript运行客户端,这就是它的用途。除非你实际上指的是Java而不是JavaScript,否则我认为你会发现找到或编写一些与你所拥有的库相当的服务器端代码会更好地利用时间。JavaScript的目的不是在浏览器中运行。见鬼,它在很多方面都比PHP好。我运行执行图像处理的事件驱动服务器。。用JavaScript编写。我指的是从命令行脚本运行PHP和JavaScript服务器端。这两个脚本都不会在客户端运行PHP和JavaScript都需要在服务器端运行。不会生成客户端(浏览器)代码。那么您正在寻找服务器端javascript实现吗?查看CommonJS:php和javascript都需要在服务器端运行。不会生成客户端(浏览器)代码。好的……现在我们有进展了。这是我需要做的事情。这个问题没有客户端。谢谢,但我不想把PECL和编译/安装搞得一团糟。尽管如此,您的答案似乎是一个非常合适的解决方案。
-- funcs.js
function add(a,b) {
  return a +b;
}

-- use-js-funcs.php
<?php

// create JavaScript context
$js = new JSContext();

$js_code = file_get_contents('func.js');

// define Script code
$js_code.= "\n add(5)";

// evaluate script and display result, 
// my guess is that evaluateScript returns the
// result of the last statement that was executed
echo $js->evaluateScript($script);
?>