gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:37:58 25 4
gpt4 key购买 nike

我正在尝试从 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>

我没有触及虚拟主机文件,因为我认为(?)它不适用于此处。

我的最终目标是从另一台计算机(raspberry pi)可能使用 python 代码将参数传递给 cgi 脚本,以便 iMac 可以“说”我想要的...(例如,今天的天气,灯刚刚打开。 ..等等)

关于如何使它正常工作有什么建议吗?

编辑:

根据查看错误日志的建议,我发现我的 httpd.conf 有错误。 Options FollowSymLinks +ExecCGI 行给我一条错误消息,说我需要在所有选项前加上“+”,否则就没有选项!所以我将行更改为 Options +FollowSymLinks +ExecCGI。现在效果很好。

我现在从我的 ISY994i(Insteon Controller )向 Raspberry pi3 发送一个 http GET 语句。在 pi 上,我设置了一个等待 GET 语句的 HTTPServer。一旦收到,它会在 pi 上触发一个 python 脚本,该脚本解析一个天气 xml 文件(我之前为我的 iRule 应用程序创建的,使用 wunderground.com 作为源)并提取当天的天气预报,这是一个文本描述段落;然后它会重新格式化文本预测,以便 iMac 可以正确地说出来;最后,使用 urllib2,它会触发 iMac“说出”天气。我仍然遇到一个问题,在 pi 上,将 HTTPServer 设置为在重新启动时自动运行,但是当我手动启动它时它运行良好。我将提出一个新问题以寻求解决此问题的帮助。

最佳答案

首先要指出的是,通过网络服务器运行的脚本不太可能具有让计算机说话等事情发生的权限。 Web 服务器用户将无权访问系统的该部分。您最好通过 ssh 执行此操作。

但是,为了让您能够按照要求通过 Web 服务器运行脚本,请执行以下操作:

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

AddHandler cgi-script .cgi

因此它只适用于具有该扩展名的脚本。目前你没有。我知道你说你试过了,但没有它肯定行不通。所以把它放回去,看看它现在是否有效。如果没有,请不要再将其取下。这是需要的。让我知道你的进展情况。

关于linux - 从另一台计算机在 Yosemite/Apache 上运行 CGI 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41129446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com