Php 使web服务器携带一个程序 我想做的是:让服务器携带一个程序来分析一个图片(发送到Web服务器)并返回一个结果,程序已经存在,并且用C和C++编写。出于兴趣,该程序分析图案/网格,以确定金属物体上施加的压力大小,并在不超过1秒的时间内进行分析

Php 使web服务器携带一个程序 我想做的是:让服务器携带一个程序来分析一个图片(发送到Web服务器)并返回一个结果,程序已经存在,并且用C和C++编写。出于兴趣,该程序分析图案/网格,以确定金属物体上施加的压力大小,并在不超过1秒的时间内进行分析,php,web-services,web-applications,Php,Web Services,Web Applications,我想知道: 如何在web服务器上存储程序(或者如何存储程序以便从web服务器访问它) 如何通过web服务器调用该程序 我想上面提到了一些使用PHP等语言的编程,但是这些代码是在哪里编写/执行的 我会在Web服务器级别用PHP来实现这一点 PHP有一个名为shell\u exec的函数。此命令可以调用程序 $result = shell_exec("./your_program ".escapeshellargs($image_path)); 在Web服务器有权执行程序的情况下(应为chmod

我想知道:

  • 如何在web服务器上存储程序(或者如何存储程序以便从web服务器访问它)
  • 如何通过web服务器调用该程序
  • 我想上面提到了一些使用PHP等语言的编程,但是这些代码是在哪里编写/执行的

  • 我会在Web服务器级别用PHP来实现这一点

    PHP有一个名为
    shell\u exec
    的函数。此命令可以调用程序

    $result = shell_exec("./your_program ".escapeshellargs($image_path));
    
    在Web服务器有权执行程序的情况下(应为chmod mode 755)

    (请注意,这应该在*nix上工作,对于Windows,我不确定)


    (如果你不能在服务器上编译你的程序,交叉编译然后上传)

    我真的会在Web服务器级别用PHP来做这件事

    PHP有一个名为
    shell\u exec
    的函数。此命令可以调用程序

    $result = shell_exec("./your_program ".escapeshellargs($image_path));
    
    在Web服务器有权执行程序的情况下(应为chmod mode 755)

    (请注意,这应该在*nix上工作,对于Windows,我不确定)


    (如果无法在服务器上编译程序,请交叉编译并上载)

    解决此问题的简单方法是在web请求中同步运行程序(这意味着您的网页必须等待程序交付结果)。这意味着,在PHP页面(或控制器,如果您使用的是类似MVC的体系结构)中,可以使用
    system()
    或类似工具在服务器上运行程序。这可能会将结果输出到标准输出,或者输出到文件或数据库。如果您的程序需要一秒钟才能运行,只要您的用户数量较少,这可能是一个可接受的延迟

    为此:

    • 将控制台程序存储在服务器上的某个位置,“C:\My Programs\My Analyzer\Analyzer.exe”就可以了
    • 您应该知道图像文件的路径位置。然后可以将该路径名作为参数传递给控制台程序
    • 然后,您可以从
      stdout
      或其他地方检索调用结果,具体取决于控制台程序返回其分析的方式
    也就是说,更好的运行方法是运行作业服务器,以便异步运行程序(这意味着作业服务器接受运行程序的请求,并在插槽空闲时运行)。这将意味着您的网页将运行得更快,并且您的服务器不会因同时有太多人运行您的程序而过载。缺点是系统的体系结构更加复杂,您必须更改UI以处理未处理的作业


    如果你对建立一个工作服务器感兴趣,考虑一下像Gearman这样的事情。您必须轮询服务器以查看作业是否已被处理,或者让作业进程向数据库写入完成标志,这可以通过web脚本轻松检查。

    此问题的简单解决方案是在web请求中同步运行程序(这意味着您的网页必须等待程序交付其结果)。这意味着您在PHP页面(或控制器,如果您使用的是类似MVC的体系结构)中使用
    system()
    或类似操作,在服务器上运行程序。这可能会将结果输出到标准输出,或输出到文件或数据库。如果程序运行需要一秒钟,只要用户数量较少,这可能是可以接受的延迟

    为此:

    • 将控制台程序存储在服务器上的某个位置,“C:\My Programs\My Analyzer\Analyzer.exe”就可以了
    • 您应该知道映像文件的路径位置。然后可以将该路径名作为参数传递给控制台程序
    • 然后,您可以从
      stdout
      或其他地方检索调用结果,具体取决于控制台程序返回其分析的方式
    也就是说,更好的运行方法是运行作业服务器,以便异步运行程序(这意味着作业服务器接受运行程序的请求,并在插槽空闲时运行)。这意味着您的网页将运行得更快,并且您的服务器不会因同时运行您的程序的人数过多而过载。缺点是系统的体系结构更复杂,您必须更改UI以处理未处理的作业


    如果你对建立一个工作服务器感兴趣,考虑一下像Gearman这样的事情。你必须轮询服务器,看看是否已经处理了一个作业,或者让你的作业过程给你的数据库写一个完成标志,这可以通过你的Web脚本来简单地检查。

    代码>我花了很长时间寻找适合我的解决方案。祝你好运。只要你做到了这一点,你就不必因为对这里的任何事情缺乏了解而向任何人道歉什么操作系统?什么程序?我的操作系统是Windows 7,如果你指的是应该在web服务器上的程序,它是一个自制程序。感谢你的帮助!自制程序是什么是吗?一次分析需要多长时间?它分析一个图案/网格,以确定金属物体上施加了多少压力。不长,我最多说一秒钟。
    我花了很长时间到处寻找适合我的解决方案,但没有任何运气。
    只要你这样做了,你就不必为此向任何人道歉缺少你