我在 serverfault.com 上创建了一个问题,建议我在这里提问。
我有一个 PHP 脚本。当我使用浏览器时,它运行良好。它在同一目录中写入一个 XML 文件。该脚本需要大约 60 秒才能运行,生成的 XML 文件大约为 16 MB。
我在 Windows Server Web edition SP1 64 位上通过 FastCGI 运行 PHP 5.2.13。
该代码从 SQL 服务器中提取库存,运行一个循环来为第三方构建一个 XML 文件。
我在任务调度程序中创建了一个任务来运行 c:\php5\php.exe "D:\inetpub\tools\build.php"
任务调度程序显示大约一分钟的时间流逝,这是脚本在浏览器中运行所需的时间。
没有返回错误,但没有创建文件。
每次更改计划任务属性时,都会出现一个用户密码框,然后我输入管理员帐户密码。
如果我在命令行运行相同的路径和参数,它不会出错,也不会创建文件。
当我以管理员身份右键单击运行命令提示符时,仍未创建该文件。我在文件创建之后得到了我的 echo 语句“文件已发布”,并且没有返回错误。
我正在做一个简单的 fopen fwrite fclose 来将 php 变量的内容保存到 .xml 文件中,并且只有在通过浏览器运行脚本时才会创建该文件。
下面是 xml-building 循环之后发生的事情:
$feedContent .= "</feed>";
sqlsrv_close( $conn );
echo "<p>feed built</p>";
$feedFile = "feed.xml";
$handler = fopen($feedFile, 'w');
fwrite( $handler, $feedContent );
fclose( $handler );
echo "<p>file published</p>"; …
Run Code Online (Sandbox Code Playgroud) 我正在阅读lighttpd 中mod_fastcgi的文档,它说:
"bin-path": 本地 FastCGI 二进制文件的路径,如果没有本地 FastCGI 正在运行,应该启动它
如果我想让 lighttpd 直接启动我的 fastcgi 进程,并且该进程是由 python 脚本创建的怎么办?像这样的东西:
# bang omitted... I need to use python from virtualenv
# File runfastcgi.py
import os
import sys
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "atc.settings")
from django.core.management import execute_from_command_line
execute_from_command_line(['manage.py', 'runfcgi', ... ])
Run Code Online (Sandbox Code Playgroud)
此外,我正在使用 virtualenv,我有办法从环境中导出所有路径,甚至是 virtualenv 的 python 解释器的路径......唯一的问题是,根据 mod_fastcgi 文档,我只能通过二进制文件的路径,所以,我似乎不能这样做:
bin-path => (env.ATC_VIRTUALENV + 'bin/python' + ' ' + 'runfastcgi.py')
Run Code Online (Sandbox Code Playgroud)
我错了吗?有没有要求lighttpd使用virtualenv python来执行自定义runfastcgi.py?
我正在尝试使用 FASTCgi 运行 Nginx 来通过 C 应用程序后端处理请求。
我正在使用本教程:http://www.kutukupret.com/2010/08/20/nginx-fastcgi-hello-world-in-c/
我的nginx配置文件:
server
{
listen 80;
listen [::]:80 default ipv6only=on;
server_name localhost;
location /
{
fastcgi_pass 127.0.0.1:8000;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
}
}
Run Code Online (Sandbox Code Playgroud)
我的 C …
我正在尝试在我的 macbook(Yosemite 10.9.3)上安装 php-cgi,因为当我尝试在浏览器中打开内容时,PhpStorm IDE 不断向我回复“找不到 php-cgi”。我尝试使用较新版本的 php 解释器,因为当前版本是 5.4。但是我只能在 php.net 站点中找到这些包,但我不知道如何安装它。我也尝试下载自制软件,但又不知道如何从那里开始。我尝试使用 MacPort 通过使用以下行来安装 fastcgi:sudo port install php5 +fastcgi
但它返回这个:
---> Dependencies to be installed: autoconf213 gawk gettext expat libiconv ncurses readline m4 perl5 perl5.16 gdbm bzip2 gsed libtool libxml2 xz zlib mhash pcre libedit pkgconfig
---> Fetching archive for expat
---> Attempting to fetch expat-2.1.0_0.darwin_13.x86_64.tbz2 from http://packages.macports.org/expat
---> Attempting to fetch expat-2.1.0_0.darwin_13.x86_64.tbz2.rmd160 from http://packages.macports.org/expat
---> Installing expat @2.1.0_0
---> Activating expat @2.1.0_0
Error: org.macports.activate for port expat returned: Image …Run Code Online (Sandbox Code Playgroud) 我对FCGI协议的了解是,第一次调用应用程序时,它会将其加载到内存中,运行它,将响应返回给服务器,完成响应但不会结束应用程序,它会使其在内存中运行,然后下一个请求将使用此编译的应用程序的内存副本来处理请求.
阅读关于PSGI协议,它似乎以相同的方式工作.
我的问题是,我的假设是正确的,它们对于每秒请求的应用速度是一样的.
令人困惑的问题,如果他们的工作相同,为什么我看到plackup有命令行选项来启用FCGI.
我相信这是一个在某处被问过的问题,如果是这样的话,请原谅,但是谷歌搜索并没有给我任何有形的东西。
这是我的场景:
我正在使用 apache http 基本身份验证保护 Web 目录。所以我在根文件夹中有我的 .htaccess 并且我的 httpd.conf 被配置为覆盖所有,以便它考虑 .htaccess 。我的.htaccess的内容如下:
AuthType 基本
身份验证名称“测试”
AuthUserFile /etc/httpd/.test_pass
需要有效用户
.test_pass 已经通过 htpasswd 设置成功。通过浏览器或任何 html 文件访问 Web 根文件夹时,我会正确弹出身份验证。使用密码为我提供了预期的访问权限。
但是当我访问一个 php 页面时,没有出现身份验证弹出窗口并且呈现 php 页面。
这是我的设置:
我需要能够通过 apache 基本身份验证设置用户名/密码身份验证,以保护目录中的每个文件,包括 php 文件。
我正在使用开源软件;因此修改软件代码是最后的手段。
php-fpm 和 mod_proxy_fcgi 有变通方法/解决方案吗?
谢谢
StackOverflow 上有多个问题如何使用具有不同 fastcgi 后端的子文件夹或类似的问题但没有任何工作正常 - 经过几个小时的尝试和阅读文档(可能缺少一个小细节)我放弃了。
我有以下要求:
/运行(fastcgi 后端127.0.0.1:9000)/crmphp 7.0 应用程序上运行,它必须相信它正在运行/(fastcgi 后端127.0.0.1:9001)在尝试删除/crm前缀之前,我尝试首先为位置前缀定义单独的 php 上下文。但似乎我做错了什么,因为/crm每次都使用/.
我的实际精简配置删除了所有不相关的内容和所有失败的测试:
server {
listen 80;
server_name myapp.localdev;
location /crm {
root /var/www/crm/public;
index index.php;
try_files $uri /index.php$is_args$args;
location ~ \.php$ {
# todo: strip /crm from REQUEST_URI
fastcgi_pass 127.0.0.1:9001; # 9001 = PHP 7.0
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
location / { …Run Code Online (Sandbox Code Playgroud) 我一直在尝试使用 NGINX 作为网络服务器来托管一个简单的 Wordpress 博客。该博客作为domain_name.com/blog 下的子目录托管。
主博客可以正确打开。但是当尝试打开domain_name.com/blog/wp-admin下的wp-admin时,我的浏览器显示ERR_TOO_MANY_REDIRECTS。
我不确定这是否是我的 NGINX 配置或 WordPress 配置的问题。以下是我的 NGINX 服务器块:
server {
listen 80;
server_name <domain_name.com>;
root /var/www/html;
index index.php;
location /blog {
try_files $uri $uri/ /blog/index.php?$args;
}
location ~ \.php$ {
include fastcgi.conf;
fastcgi_intercept_errors on;
fastcgi_pass php;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
}
Run Code Online (Sandbox Code Playgroud)
WordPress 安装在 /var/www/html/blog 目录下。数据库中“siteurl”和“home”wp_options 的值都指向domain_name.com/blog。
解决这个问题的好方法是什么?
可能有用的附加说明:当我尝试访问 wp-content 目录下的静态文件时,它们打开时没有任何问题。那里没有重定向错误。
我已经将我的Django应用程序配置为在Linux上运行Apache + FastCGI(Ubuntu,如果重要的话).我的问题是:当运行Django作为fastcgi时,如何将stdout重定向到文件.
编辑 澄清:我熟悉django-logging模块,是的,我已经使用它了.这不是我的问题所在.
说当我从控制台运行Django时
python manage.py runserver
Run Code Online (Sandbox Code Playgroud)
我得到了控制台中显示的所有请求,错误等,这是stdout.但是,当我在apache下运行fastcgi时,stdout会去哪里?
是否有内置方法用PHP清除Nginx fastcgi_cache?我知道我可以编写一个PHP脚本,并通过手动删除所有缓存文件,但这看起来太像黑客了.