需要代码来执行存在于多个服务器上的单个php脚本(不离开调用页面)

时间:2010-02-23 21:25:48

标签: php

我的几个网站上都有updater.php脚本。此updater.php文件设置为在从主基站(我的中央服务器)调用时执行代码。

所以我希望创建一个各种各样的仪表板,其中列出了我的所有远程站点地址,以及这个updater.php脚本的路径,如此......

www.server1.com/path/updater.php
www.server2.com/path/updater.php
www.server3.com/path/updater.php
...etc (there will be lots of them)

我将创建一个界面来列出这些界面旁边的复选框,并选择全部等等

我正在寻找创建一个PHP脚本,它将迭代该列表中的整个url集合并执行对每个服务器上updater.php文件的调用,例如传递一个“version = v001”。 ..

$.get("http://server1.com/path/updater.php?version=v001");
$.get("http://server2.com/path/updater.php?version=v001");
...etc

我已经在updater.php(驻留在我所有网站中的文件)中设置了代码,这样当它收到请求时,会解析$ _GET ['version']以查看版本是什么,它知道要在我的中央服务器上运行哪个文件来执行更新。

我只是在寻找一些线索,如何为此仪表板创建脚本,将其全部设置为动态...

PS:总的来说,这基本上是一个批量更新程序脚本,可以执行wordpress主题更新,而无需访问每个站点并单独执行。

4 个答案:

答案 0 :(得分:1)

看起来你正在使用jQuery,并且AJAX可以调用脚本而不是PHP脚本。如果情况并非如此,请忽略这一点。

单击“GO”按钮后,使用javascript获取所有选中复选框的值。循环遍历那些,执行$ .get()的事情。这应该就是你需要做的一切。

或者,您可以捕获来自get()调用的响应并更新状态div,以告知您它们是否都成功运行。

答案 1 :(得分:0)

您可能想检查PHP的cURL扩展程序,它允许您轻松地向脚本中的多个站点发送请求。

如果您需要进一步的帮助,请告诉我 - 我会修改。

编辑

你可以使用一个允许你轻松管理你的AJAX调用的javascript框架(即jQuery - imho最严格)。然后做类似的事情:

<form name="updater" id="updater" ...>
    <input type="checkbox" name="server[]" value="0"/> Server 1
    <input type="checkbox" name="server[]" value="1"/> Server 2
    ...
</form>

<script type="text/javascript">
    var server_url = [
        'www.server1.com/path/updater.php',
        'www.server2.com/path/updater.php',
        'www.server3.com/path/updater.php'
    ];

    $('#updater').bind('submit', function() {
        $('input[name="server[]"]:checked', this).each(function() {
            $.get(server_url[this.value]);
        });
    });
</script>

你走了!

答案 2 :(得分:0)

我认为不需要javascript。老实说,如果你依靠php的能力摇摇欲坠,我会抛弃一堆iframe标签指向相应的网址。让浏览器执行请求。关于iframe的好处是您可以让远程脚本输出“成功”或错误消息。

答案 3 :(得分:0)

由于无法执行跨站点脚本,您无法单独使用jQuery。

<?php

    if($_SERVER['REQUEST_METHOD'] == "POST")
    {
        // Run through each 
        foreach($_POST['servers'] as $serverHost)
        {

            // Now contact the server.
            // if getting urls is disabled (which some hosts do)
            // you can use CURL to connect to the server.
            $result = file_get_contents($serverHost);
        }
    }
?>
<form method="post" >
    <input type="checkbox" name="servers[]" value="http://foo1.com/updater.php" />
    <input type="checkbox" name="servers[]" value="http://foo2.com/updater.php" />
    <input type="checkbox" name="servers[]" value="http://foo3.com/updater.php" />
    <input type="checkbox" name="servers[]" value="http://foo4.com/updater.php" />
    <input type="checkbox" name="servers[]" value="http://foo5.com/updater.php" />
    <input type="submit" />
</form>