【发布时间】:2017-04-29 00:09:42
【问题描述】:
我正在尝试从 Windows 10 计算机运行驻留在我的 iMac(安装了 Yosemite)上的简单 cgi 脚本。
这是 say_test01 脚本(请注意,我最后尝试使用 .cgi,但它也不起作用)
#!/bin/bash
echo -e "Content-type: text/html\n"
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
这是目录部分:
<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/users/*.conf
在 /etc/apache2/users 目录中,我有一个文件 Name.conf,其中包含以下代码
<Directory "/Users/Name/Sites/">
AllowOverride All
Options Indexes MultiViews FollowSymLinks
Require all granted
</Directory>
我没有触及虚拟主机文件,因为我认为(?)它不适用于这里。
我的最终目标是从另一台计算机(树莓派)传递参数,可能使用 python 代码到 cgi 脚本,以便 iMac 可以“说出”我想要的...(例如今天的天气,灯刚刚打开。 ..等)
关于如何让这个工作的任何建议?
编辑:
使用查看错误日志的建议,我发现我的 httpd.conf 有错误。 Options FollowSymLinks +ExecCGI 行给了我一条错误消息,说我需要在所有选项前面加上“+”或没有选项!所以我将这一行改为Options +FollowSymLinks +ExecCGI。现在效果很好。
我现在从 ISY994i(Insteon 控制器)向 Raspberry pi3 发送一个 http GET 语句。在 pi 上,我设置了一个等待 GET 语句的 HTTPServer。收到后,它会在 pi 上触发一个 python 脚本,该脚本解析一个天气 xml 文件(我之前为我的 iRule 应用程序创建的,使用 wunderground.com 作为源)并提取当天的天气预报,这是一个文本描述性段落;然后它重新格式化文本预测,以便 iMac 可以正确地说出来;最后,使用 urllib2,它触发 iMac 来“说”天气。我仍然遇到一个问题,在 pi 上,将 HTTPServer 设置为在重新启动时自动运行,但是当我手动启动它时它运行良好。我将打开一个新问题以获得解决此问题的帮助。
【问题讨论】:
标签: linux apache raspberry-pi cgi osx-yosemite