【问题标题】:Execute a Local File Through Javascript/PHP通过 Javascript/PHP 执行本地文件
【发布时间】:2011-07-24 04:16:11
【问题描述】:

好的,首先,我意识到通过 JavaScript 执行本地文件是不可能的。其次,我意识到从网页执行本地文件的能力非常危险,而且这个问题可能看起来很粗略。但是,我的研究表明,通过AJAX调用PHP函数exec(),在用户没有意识到使用JS的情况下,确实可以在本地系统中执行文件。

在我继续之前,让我先说我无意以危险的方式使用它。我的高级神经科学/计算机科学论文实际上需要这个:

  • 使用无线脑电波监测耳机。

  • 我需要将网页上的点击同步到另一台监控脑电波的计算机上的事件标记。

  • 我需要在不打扰用户或在后台一遍又一遍地请求许可的情况下执行此操作,以免中断实验。

我目前正计划通过编写一个 Chrome 扩展程序来执行此操作,该扩展程序将脚本注入到选定的页面,选择我想要的元素,然后使用 AJAX 从那里单击运行该功能。

所以这是我的问题:

  1. 我对 AJAX 和 PHP 不是很熟悉。设置它以便 Javascript 在点击事件上调用 PHP 文件的最直接方法是什么?

  2. 有谁知道没有禁用 exec() 功能的网络托管公司?我知道这听起来很粗略,但我真的需要它来完成我的论文。

非常感谢!

【问题讨论】:

  • 您能告诉我们本地文件中有哪些需要使用文件吗?还有许多其他方法可以将数据持久保存在用户的机器上,这些方法并不像... icky。
  • 我正在运行的本地文件是一个批处理文件 (.bat),它运行一个 matlab 文件,该文件通过并行端口向正在收集脑电波数据的计算机发送一个标记,并为确切时间
  • 嗯。所以,我认为你在这里不走运,除了你现有的计划。浏览器安全模型将阻止网页执行本地二进制文件和脚本——期间。浏览器插件可能是您唯一的选择,尽管我实际上不确定 Chrome 的扩展系统中是否可以本地执行。
  • 我认为您可能对 exec 的工作方式感到困惑...它将允许您在 php 解释器所在的服务器上执行 shell 脚本/批处理文件...而不是在机器上用户正在浏览 - 除非它们碰巧是同一个。
  • 是的,您需要设置 Web 服务器、PHP 以及您选择的任何数据库,尽管一些优质主机可以让您远程访问。有一个多合一的软件包,只需点击几下即可设置所有内容。通过在本地安装 PHP 应用程序,应用程序本身实际上可以执行命令上的批处理脚本。

标签: php javascript ajax file


【解决方案1】:
  1. $.get 或 $ajax 可能是函数。前任。 $.get(URL, DATA, CALLBACK) 数据和回调是可选的,如果您没有要发送的内容并且在响应中无事可做,则可以跳过(听起来可能是您的情况)
    http://api.jquery.com/jQuery.get/
    http://api.jquery.com/category/ajax/

  2. 难道你的大学不能在这里为你提供帮助吗?

【讨论】:

  • 对于第一个,我确实意识到这一点,我更想知道是否有人可以提供一个用于调用 PHP 文件的语法的具体示例......而对于第二个,我明天我要问我的大学,但我敢肯定,作为一所拥有 IT 人员并且非常重视数据安全的大学,他们的托管已禁用这些危险功能。
  • @Jeff,这是一个使用 jQuery 调用 PHP 脚本的正确但无用的示例,忽略了参数和脚本的响应:$.get('/foo.php'); 简单,不是吗?查看手册中的示例,了解可能对您稍微更实用的内容,例如传递示例和对结果执行智能操作。
  • 哇,这很简单。我实际上不需要传递任何类型的参数或对结果做任何事情,我只需要运行脚本即可。这真的是我所需要的吗?疯狂的。我喜欢 jquery...
  • @Jeff。这就是我的印象,你只需要提醒服务器事件已经发生。所以真的 URL 是你唯一需要传递的东西。注意:如果确切的时间很重要,您可能希望从浏览器发送时间戳,以便延迟不会以不可预测的方式更改值并导致您失去精度
  • 好电话。我该怎么做呢?
【解决方案2】:

跟踪网页点击的计算机应将信息存储或附加到本地文件中,并且该文件应在线可用。例如。将您的标记存储到本地文件并在机器上安装网络服务器,以便可以在线找到该文件。

现在监测脑电波的机器可以通过使用简单的 PHP 脚本来获取数据。

<?php
    header('Content-type: application/xml');
    $markers = 'ip.address.of.machine/markers.xml';
    $handle = fopen($markers, "r");

    if ($handle) {
        while (!feof($handle)) {
            $buffer = fgets($handle, 4096);
            echo $buffer;
        }
        fclose($handle);
    }
?>

如果您需要将其合并到网页中,请使用 Jquery 的 .load() 函数来调用脚本。

$("#markers").load("path/to/file/above.php", function(){
      //do your thing
});

【讨论】:

  • 嘿,很抱歉回复太晚了,但这是一个很棒的答案,也是我一直在努力的目标。我现在遇到的问题是我正在编写一个 google chrome 扩展程序,以便我可以记录其他人网站上的点击,当我尝试发出 .load() ajax 请求时,我不能因为安全错误。你有没有办法解决这个问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-05
  • 2017-03-21
  • 1970-01-01
  • 1970-01-01
  • 2011-10-20
  • 2019-08-02
  • 2012-02-16
相关资源
最近更新 更多