我有一个PHP脚本作为CGI程序运行,HTTP Authenticate标头被吃掉并吐出.所以我想实现某种基于FORM的身份验证.作为附加约束,没有数据库,因此不能存储会话数据.
我非常愿意拥有主用户名和密码.我只需要保护应用程序免受不知道这些凭据的入侵者的侵害.
那你将如何实现呢?
饼干?
我可以提供表单,如果它有效,我可以发回一个cookie,它是IP地址的哈希密码.然后我可以阻止页面呈现,除非事物正确解密.但我不知道如何在PHP中实现它.
我正在嵌入式设备上创建一个小应用程序,它上面运行着一个boa Web服务器.我正在创建一个混合使用纯HTML页面和Perl脚本的Web应用程序来与主应用程序进行交互.有没有办法隐藏一些页面是从设备上的cgi-bin提供的?
我现在拥有以下网址.
我更喜欢的是:
使用上面的URL将我带到相应的index.html或index.pl文档.文件结构和服务器设置的某种组合是否会启用此行为?
我在谷歌搜索过这个,但是你可以想象我在URL中用"cgi-bin"获取搜索结果的页面和页面.我希望以前有人这样做过.
编辑:我应该提一下,我知道如何通过在我的Web根目录中创建单独的文件夹来为纯HTML页面执行此操作,所有文件夹都使用index.html页面.我的问题是让这种类型的解决方案与cgi-bin目录中的.pl或.cgi文件一起使用.
我有一个 网站,我想用Unix下载wget.如果查看文件的源代码和内容,则包含名为SUMMARY的部分.但是在发出这样的wget命令之后:
wget -O downdloadedtext.txt http://www.ncbi.nlm.nih.gov/IEB/Research/Acembly/av.cgi?db=mouse&c=gene&a=fiche&l=2610008E11Rik
Run Code Online (Sandbox Code Playgroud)
该内容downdloadedtext.txt不完整,与该网站的源代码不同.例如,它不包含SUMMARY部分.有正确的方法来正确获取完整内容吗?
我问这个的原因是因为我想从HTML中的不同值自动下载.
在CGI环境中使用bottle.py时,我一直很难获得除简单索引之外的任何东西.当我尝试返回/你好时,我收到了404响应.但是,如果我请求/index.py/hello
import bottle
from bottle import route
@route('/')
def index():
return 'Index'
@route('/hello')
def hello():
return 'Hello'
if __name__ == '__main__':
from wsgiref.handlers import CGIHandler
CGIHandler().run(bottle.default_app())
Run Code Online (Sandbox Code Playgroud)
这是我的.htaccess文件
DirectoryIndex index.py
<ifmodule mod_rewrite.c="">
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.py/$1 [L]
</ifmodule>
Run Code Online (Sandbox Code Playgroud)
我从这里复制了大部分代码,因为我正在使用DH,它似乎相关:http://blog.coderonfire.com/2010/02/running-bottle-python-micro-framework.html
谢谢你的帮助.
我正在尝试创建一个文件上传页面,它会提示用户输入文件,并在显示进度时上传.
目前我已经设法创建一个可以调用我的python脚本的简单HTML页面.然后python脚本将获取文件并以1000字节的块上传.
我有两个主要问题(主要是由于对此全新):
1)我无法获得文件大小来计算百分比2)我不知道如何在服务器端python和页面中的任何内容之间进行通信以更新进度状态;大概是javascript.
我是否会采取错误的方式?或者我的困境有解决方案吗?
这是我的python代码:
#!/usr/local/bin/python2.5
import cgi, os
import cgitb; cgitb.enable()
try:
import msvcrt
msvcrt.setmode (0, os.O_BINARY)
msvcrt.setmode (1, os.O_BINARY)
except ImportError:
pass
form = cgi.FieldStorage()
upload = form['file']
if upload.filename:
name = os.path.basename(upload.filename)
out = open('/home/oetzi/webapps/py/' + name, 'wb', 1000)
message = "The file '" + name + "' was uploaded successfully"
while True:
packet = upload.file.read(1000)
if not packet:
break
out.write(packet)
out.close()
else:
message = "Derp... could you try that again please?"
print """\
Content-Type: text/html\n …Run Code Online (Sandbox Code Playgroud) 我试图在python上运行VMS上运行一个非常简单的CGI服务器.
import sys
from BaseHTTPServer import HTTPServer
from CGIHTTPServer import CGIHTTPRequestHandler
server_address=('',8080)
httpd = HTTPServer(server_address, CGIHTTPRequestHandler)
httpd.serve_forever()
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是它正确地提供静态内容并且它试图执行CGI-s(它在正确的位置,我已经将这些CGI与Apache一起使用,因此该部分绝对不是问题)但它挂在某处.这是我对VMS不了解的事情.
任何指向正确方向的指针都将受到赞赏.:)
更新:简化,我需要在VMS上执行程序并以某种方式获取该程序的结果.任何对执行子进程和获取结果的引用对我来说都足够了.
我正在整理一个写入数据库的小型Web应用程序(Perl CGI和MySQL).CGI脚本从表单中获取一些信息并将其写入数据库.但是,我注意到,如果我在网络浏览器上点击"重新加载"或"返回",它会再次将数据写入数据库.我不想要这个.
在这种情况下,防止重写数据的最佳方法是什么?
我有这个Perl脚本位于我的Apache服务器的cgi-bin文件夹中:
#!/usr/bin/perl
use strict;
use warnings;
$| = 1;
print "Content-type: text/html\r\n\r\n";
print "Hello there!<br />\nJust testing .<br />\n";
my $top = 5;
foreach (1..$top) {
print "i = $_<br />\n";
sleep 1;
}
Run Code Online (Sandbox Code Playgroud)
我想在这里实现的是逐步更新网页以向用户显示更新状态.然而,我实际上得到的是在延迟5秒之后的整个输出.
有什么办法可以编写一个能够不断告知用户进度的脚本吗?我有一个脚本需要很长时间才能完成,我希望能够实时看到它的进度而不是完整的脚本.
我也尝试将autoflush模式设置为off($ | = 0),但即便如此也没有做任何事情.
我计划在我的网站上添加一个更好的搜索功能,所以我认为我会用C语言编写它并使用CGI作为访问它的方法.但就基于CGI的东西而言,Perl似乎是最受欢迎的语言.这是为什么?用C或机器代码编程是不是更快?
如果有的话,用脚本语言编写它有什么好处?
谢谢.
问题如下:
echo 'Hello...';
die('I died...');
echo 'HAHAHA!!!';
Run Code Online (Sandbox Code Playgroud)
在网络浏览器上,它在 die() 之后执行 echo。CLI 在 die() 上停止,并且没有按预期显示回显。
我的规格: PHP 7.4 (FPM) Web 服务器 Nginx (也尝试使用 apache 得到相同的结果)
另外,我在 Windows 上有一个很长一段时间的测试服务器,当调用 exit 或 die 时它正在退出脚本,但不知何故在 debian 测试服务器上没有这样做。
我有什么遗漏的吗?你们有什么建议吗?
提前致谢....
2022年7月27日更新:
@MarkusZeller yes 禁用了 opcache:

仍然无法正常工作...但在 php7.4.26 下的 Windows 服务器上以某种方式运行脚本并达到预期的模具
开发环境是带有 Debian 11 (WSL2) 的 Windows 我昨天也在我家里安装了基础 Debian 11 的测试机器上尝试过,它也有同样的问题。Debian 11 测试服务器的情况也是如此。