从另一台计算机上在Yosemite/Apache上运行CGI脚本



我正在尝试运行一个简单的CGI脚本,该脚本位于我的iMac(已安装的优胜美地)上。

这是 say_test01 脚本(请注意,我在最后尝试了.cgi,但也没有起作用)

  #!/bin/bash
  echo -e "Content-type: text/htmln"
  cat << junk
  <html>
  <head>
  <title>
  saying
  </title>
  </head>
  <body>
  junk
  #-----------------------
  osascript -e "set volume 8"
  say -v Whisper This is just wrong!
  osascript -e "set volume 4"
  say -v Whisper This is OK!
  #-----------------------
  cat << junk
  </body>
  </html>
  junk

在iMac上我正在运行Apache v2.4.16。

在iMac上,从终端中,我可以输入 ./say_test01 ,我可以听到声音说短语。

再次,在iMac上,但是从浏览器中,当我输入 localhost/cgi-bin/say_test01 时,我看到的只是文件的内容。

我从阅读其他线程中理解这是因为系统不知道哪个应用程序与此文件关联。

当我从win10 pc上的浏览器运行时,命令 192.168.1.55/cgi-bin/saysomething 我要么看到显示的文件的内容,要么我收到错误消息。到达。

所以我正在寻找一些帮助来解决这个问题...

httpd.conf 中有一些摘录:

这些行已删除"#":

LoadModule authz_host_module libexec/apache2/mod_authz_host.so
LoadModule authz_core_module libexec/apache2/mod_authz_core.so
LoadModule cgi_module libexec/apache2/mod_cgi.so
LoadModule userdir_module libexec/apache2/mod_userdir.so
LoadModule alias_module libexec/apache2/mod_alias.so

这是目录 e节:

<Directory "/Library/WebServer/CGI-Executables">
    AddHandler cgi-script .cgi
    Options FollowSymLinks +ExecCGI
    AllowOverride None
    Require all granted
</Directory>

和最后此行已删除'#'

包括/private/etc/apache2/extra/httpd-userdir.conf

httpd-userdir.conf 文件中,以下行具有'#'删除

包括/private/etc/apache2/user/*。conf

/etc/apache2/users 目录中我有文件 name.conf 具有以下代码

<Directory "/Users/Name/Sites/">
    AllowOverride All
    Options Indexes MultiViews FollowSymLinks    
    Require all granted
</Directory>

我没有触摸虚拟主机文件,因为我认为(?)在这里不适用。

我的最终目标是从另一台计算机(Raspberry pi)传递参数,也许是使用Python代码到CGI脚本,以便iMac可以"说"我想要的内容...(例如,今天的天气,灯光刚刚打开。..ETC)

关于我如何使此工作的任何建议?

编辑:

使用建议查看错误日志的建议,我看到我的httpd.conf有错误。行选项collowsymlinks execcgi 给了我一个错误消息,说我需要在所有选项面前或没有选项的" "!因此,我将行更改为选项 Collassymlinks Execcgi 。现在运行良好。

我现在从我的ISY994I(Insteon Controller)向Raspberry PI3发送HTTP GET语句。在PI上,我设置了一个Httpserver,该httpserver等待Get语句。收到后,它会在PI上触发Python脚本,该脚本解析了天气XML文件(我以前是为Irule应用程序创建的,使用Wunderground.com作为源来源),并提取了当前的天气预报,这是文本描述性段落;然后,它重新整理了文本预测,以便iMac可以正确地说出来。最后,使用Urllib2,它触发了iMac"说"天气。我仍然在PI上遇到一个问题,设置了Httpserver以自动运行在重新启动上自动运行,但是当我手动启动它时,它可以很好地工作。我将打开一个新问题,以寻求帮助解决。

要指出的第一件事是,通过Web服务器运行的脚本不太可能具有使事情发生的权限,例如让计算机说话。Web Server用户将没有权限访问系统的那部分。您最好通过SSH做到这一点。

但是,为了使您能够通过Web服务器运行脚本,如下:

您需要将.cgi扩展名添加到脚本中。您已经为.cgi扩展程序设置了处理程序:

AddHandler cgi-script .cgi

因此,它仅适用于具有该扩展名的脚本。目前您没有。我知道您说您尝试过它,但是没有它,它绝对无法正常工作。因此,将其放回原处,看看现在是否有效。如果没有,请不要再摘下。需要。让我知道您的状况。

最新更新