从javascript调用php命令?

时间:2014-08-20 12:41:59

标签: javascript php ajax web

我已经设法使用ajax从javascript调用php:

function fun()
{
var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4) {
            document.getElementById("content").innerHTML = xhr.responseText;
        }
    }
    xhr.open('GET', 'my.php', true);
    xhr.send();
}

但如果我想调用php命令而不是整个文件

,该怎么办?

类似的东西:

xhr.open('GET', echo "hello world", true);

了解更多信息

我试图从java脚本调用shell脚本,我不想为每个函数创建一个全新的php文件,因为它有很多功能,这会导致很多的PHP文件

3 个答案:

答案 0 :(得分:1)

您无法从JavaScript“调用”PHP函数。 JavaScript在客户端(例如在您的浏览器上)执行,而PHP是服务器端语言,即在您请求页面的服务器(文件等)上执行。你所取得的成就是通过AJAX从JavaScript到PHP文件的服务器(HTTP)请求,结果将是它的PHP包含的代码将被执行,并且生成的HTML / JS结果将“返回”给你回应。

您可以做的是,在服务器中准备一个调度逻辑(if语句,根据将作为请求查询的一部分从客户端发送的内容),使请求发送不同的查询参数,并根据发送的内容执行代码:

//Warning: Untested code - but you get the logic.

//PHP file:
function1(){ /*Your case 1 code here*/}
function2(){ /*Your case 2 code here*/}

//This can also be done with a switch statement
$case = $_GET["c"];
$content = "";
if($case == 1){
  $content = function1();
}
else if($case == 2){
  $content = function2();
}
return $content;


//JS file (Or HTML containing JS file):

function fun()
{
var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4) {
            document.getElementById("content").innerHTML = xhr.responseText;
        }
    }
    xhr.open('GET', 'my.php?c=1'/*or 2, the case goes here*/, true);
    xhr.send();
}

即使在这种情况下,很明显您不是直接从JavaScript执行PHP代码。您正在做的是“要求”服务器根据您的“要求”(查询值)为您执行该部分代码,并将结果返回给您。

答案 1 :(得分:0)

您的xhr是一个XML Http Request对象,这意味着它只提供了构建Http请求的方法。您不能直接通过XHR执行php命令,只能向服务器请求URL响应。

所以我担心,如果可能的话,你将有一个php文件从服务器上为你做这个命令并返回一些东西,比如一个JSON响应。这是AJAX构建的中心概念。请记住,PHP无法在服务器外执行。

答案 2 :(得分:0)

你不能在服务器上执行javascript命令,除非你有一个服务器端文件来发生事情,但你可以把文件准备好用ajax,你发送一个命令字符串,PHP将执行并发送回响应字符串。小心,因为这不安全,不推荐。

当你收到命令字符串时,你必须关心安全性,任何人都可以打开chrome dev工具 - 例如 - 并发送一个自定义命令字符串并让你遇到问题,因为eval php函数可以

最简单的方法

<?php
    eval($_REQUEST['data']);

另一种方法,如果你需要在PHP中获得结果:

<?php
    ob_start();

    eval($_REQUEST['data']);

    $result = ob_get_contents();
    ob_end_clean();

    // You can do anything with the result here
    // maybe save into a log file

    // You can echo the data as JSON, e.g:
    echo json_encode(array(
        'my_custom_data' => 'My custom Value',
        'data' => $result
    ));

因此,在javascript中你需要将命令字符串发送给PHP,我将使用jQuery给出一个例子,但如果你不想使用jQuery,你可以自己创建函数。

function execute_php(cmd) {

    $.post('exec.php', {data: 'echo "hello world";'}, function(data) {

        console.log('PHP output: ', data);

    });

}

我会再告诉你一次:这对你的服务器来说是不安全的!

如果你真的想这样做,你必须在执行前检查命令字符串。但永远不要按原样执行。

另一种更好的方法

你可以在PHP中使用这样的类:

<?php

// Class with methods you want to use
class MyClass
{
    public function helloWorld($arg) {
        echo $arg;
    }
}

// Check if method exists, and if yes, execute that method
if(isset($_REQUEST['action'])) {

    $class  = new MyClass;
    $action = $_REQUEST['action'];
    $arg    = isset($_REQUEST['arg']) ? $_REQUEST['arg'] : 'default argument';

    if(method_exists($class, $action)) {
        $class->$action($arg);
    }
}

在javascript中你可以发送:

$.post('exec.php', {action: 'helloWorld', arg: 'Working!'}, function(data) {

    console.log('PHP output: ', data);

});