标签: fastcgi

如何找到当前运行的PHP可执行文件?

从PHP程序内部我想知道执行它的二进制文件的位置.Perl就是$^X为了这个目的.PHP中是否有相同的东西?

这样它可以使用自己执行子PHP进程(而不是硬编码路径或假设"php"是正确的).

UPDATE

  1. 我使用的是lighttpd + FastCGI,而不是Apache + mod_php.所以是的,有一个PHP二进制文件.
  2. eval/include不是解决方案,因为我正在生成一个必须在请求之外生存的服务器.

我尝试过但不起作用的事情:

  • $_SERVER['_']看起来像我想要的命令行,但它实际上来自上一个执行程序的shell设置的环境变量.从Web服务器运行时,这是Web服务器二进制文件.
  • which php将无法正常工作,因为不保证PHP二进制文件与Web服务器中的二进制文件相同PATH.

提前致谢.

php fastcgi

9
推荐指数
1
解决办法
2万
查看次数

在alwaysdata.com部署Django

我是django的新手.我尝试了这个,但我无法部署.我能怎么做

#!/usr/bin/python
import sys
import os

base = os.path.dirname(os.path.abspath(__file__)) + '/..'
sys.path.append(base)

os.environ['DJANGO_SETTINGS_MODULE'] = 'myfirstapp.settings'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler() 
Run Code Online (Sandbox Code Playgroud)
AddHandler fcgid-script .fcgi
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^(media/.*)$ - [L]
RewriteRule ^(adminmedia/.*)$ - [L]
RewriteCond %{REQUEST_URI} !(cgi-bin/myproject.fcgi)
RewriteRule ^(.*)$ mysite.fcgi/$1 [L]
Run Code Online (Sandbox Code Playgroud)

python django fastcgi

9
推荐指数
2
解决办法
6802
查看次数

IIS6:PHP会话

我已经安装了PHP来使用IIS6(使用FastCGI).我能够通过以下代码查看显示PHP信息的示例测试网站: <?php phpinfo(); ?>

现在这个工作我尝试将我的PHP网站迁移到IIS6,这里是我得到的错误/警告的列表:

PHP Warning:  session_start(): open(C:\WINDOWS\Temp\sess_rjbv0ialf7uf03to69q1e4l101, O_RDWR) failed: Permission denied (13) in C:\Site\index.php on line 11

PHP Warning:  Unknown: open(C:\WINDOWS\Temp\sess_rjbv0ialf7uf03to69q1e4l101, O_RDWR) failed: Permission denied (13) in Unknown on line 0

PHP Warning:  Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (C:\WINDOWS\Temp) in Unknown on line 0
Run Code Online (Sandbox Code Playgroud)

看到这个后,我更正了php.ini文件以正确设置会话保存值:

session.save_path="C:\WINDOWS\Temp"
Run Code Online (Sandbox Code Playgroud)

然而,这样做没有做任何事!我怎样才能使它工作?

php session iis-6 fastcgi

9
推荐指数
1
解决办法
8786
查看次数

PHP作为FastCGI应用程序运行(php-cgi) - 如何发出并发请求?

编辑:更新 - 向下滚动
编辑2:更新 - 问题解决了


一些背景资料:

我正在用Java编写我自己的网络服务器,几天前我问过Apache如何与PHP接口,所以我可以实现PHP支持.我了解到FastCGI是最好的方法(因为mod_php不是一个选项).所以我查看了FastCGI协议规范,并设法为我的服务器编写了一个可用的FastCGI包装器.我已经测试了phpinfo()并且它可以工作,实际上所有的PHP函数似乎都运行得很好(发布数据,会话,日期/时间等等).

我的网络服务器能够同时处理请求(即user1可以在user2请求some_large_binary_file.zip的同时检索file1.html),它通过为每个用户请求生成一个新的Java线程(在完成或用户与客户端的连接时终止)来完成此操作取消).

但是,它不能同时处理2个(或更多)FastCGI请求.它的作用是,它将它们排队,所以当请求1立即完成后,它开始处理请求2.我用2个PHP页面测试了它,一个包含sleep(10),另一个包含phpinfo().

我将如何处理多个请求,因为我知道它可以完成(IIS下的PHP运行为FastCGI,它可以处理多个请求就好了).

更多信息:

我在windows下编码,我用于执行php-cgi.exe的批处理文件包含:

set PHP_FCGI_CHILDREN=8
set PHP_FCGI_MAX_REQUESTS=500
php-cgi.exe -b 9000
Run Code Online (Sandbox Code Playgroud)

但它不会产生8个孩子,该服务只是在500个请求后终止.

我从维基百科做过研究:

通过使用具有内部多路复用的单个连接(即,通过单个连接的多个请求)和/或通过使用多个连接来实现同时处理多个请求

现在很明显,多个连接对我来说不起作用,因为每次客户端请求涉及FastCGI的内容时,它都会为FastCGI应用程序创建一个新的套接字,但它并不能同时工作(而是将它们排队等).

我知道在相同连接下对FastCGI请求进行内部多路复用是通过发出具有不同请求ID的每个唯一FastCGI请求来完成的.(另见的"通信协议"标题中的最后3段这篇文章).

我没有对此进行过测试,但我将如何实现呢?我认为我需要某种FastCGI Java线程,它包含某种类型的Map和一个静态函数,我可以使用它来添加请求.然后在Thread的run()函数中它将有一个while循环,并且对于每个循环,它将检查Map是否包含新请求,如果是,它将为它们分配请求ID并将它们写入FastCGI流.然后等待输入等等,你可以看到这变得太复杂了.

有谁知道这样做的正确方法?还是有任何想法?非常感谢.

注意,如果需要,我可以提供我的FastCGI包装器的代码.


更新:

基本上,我下载了nginx并将其设置为使用PHP作为FastCGI应用程序,它也遇到了与我的服务器相同的问题.它无法处理并发的PHP请求.这让我相信我的代码实际上是正确的.所以PHP出了问题,或者我没有正确设置它.也许是因为我使用的是Windows,因为一些lighttpd用户声称Windows无法正常处理FastCGI(这没有多大意义).我将很快安装Linux并报告任何进展.

php concurrency fastcgi

9
推荐指数
1
解决办法
7897
查看次数

如何在Nginx中使用fastcgi_next_upstream

我想要一个Web服务器(nginx)和2个与后端相同的应用程序的FastCGI实例.如果第一个请求失败,我们的想法就是将请求转发给第二个请求.

显然,我需要使用upstream和fastcgi_next_upstream.但我找不到nginx.conf文件的工作示例.有没有人有这样的例子?

redundancy fastcgi nginx

9
推荐指数
1
解决办法
8606
查看次数

NGINX + PHP5-FPM在高负载下发生了段错误

我整天都在处理这个问题,这让我疯了.所有Google搜索结果和搜索都会导致死胡同.我希望有人能与我合作,为自己和未来的受害者提供解决方案.开始了.

我正在运行一个非常受欢迎的网站,每天有超过3M的页面浏览量.平均每秒34次页面浏览量,但更实际的是,在高峰时段,每秒页面浏览量超过300次.将这些视为请求.

我正在运行一个带有2个E5620 CPU,12GB RAM和一个Micron P300 6Gb/s SSD的Ubuntu 10.04 64位服务器.在高峰时段,CPU和内存负载是平均的(CPU使用20-30%,使用一半内存).

支持该站点的软件是:NGINX,MySQL,PHP5-FPM,PHP-APC和Memcached.好的,现在终于帖子的内容,这里是我的错误日志.记录了一堆这些错误.

在/ var /日志/ PHP5-FPM

7月20日14:49:47.289895 [通知] fpm正在运行,pid 29373

7月20日14:49:47.337092 [注意]准备处理连接

7月20日14:51:23.957504 [错误] [池www]无法检索一个或多个子(ren)的进程活动.稍后再试.

7月20日14:51:1.846439 [警告] [池www]子29534从开始114.518174秒后退出代码1

7月20日14:51:41.846797 [注意] [池www]孩子29597开始了

7月20日14:51:41.896653 [警告] [池www]孩子29408在信号11 SIGSEGV退出后114.596706秒开始

7月20日14:51:41.897178 [通知] [池www]孩子29598开始了

7月20日14:51:1.903286 [警告] [池www]子29398从开始114.605761秒后退出代码1

7月20日14:51:41.903719 [通知] [池www]孩子29600开始了

7月20日14:51:41.907816 [警告] [池www]孩子29437从开始114.601417秒后退出代码1

7月20日14:51:41.908253 [注意] [池www]孩子29601开始了

7月20日14:51:41.916002 [警告] [池www]孩子29513从开始114.592514秒后退出代码1

7月20日14:51:41.916501 [通知] [池www]孩子29602开始了

7月20日14:51:41.916558 [警告] [池www]孩子29494从信号11 SIGSEGV退出114.597355秒后开始

7月20日14:51:41.916873 [通知] [池www]孩子29603开始了

7月20日14:51:41.921389 [警告] [池www]子29502从开始114.600405秒后退出代码1

/var/log/nginx/error.log 2011/07/20 15:48:42 [错误] 29583#0:*569743 readv()失败(104:通过对等方连接重置)在读取上游时,客户端:77.223.197.193 ,server:domain.com,request:"GET /favicon.ico HTTP/1.1",上游:"fastcgi://127.0.0.1:9000",主持人:"www.domain.com"

2011/07/20 15:48:42 [错误] 29578#0:*571695 readv()失败(104:通过对等方重置连接)在读取上游时,客户端:150.70.64.196,server:domain.com,request:" GET/page …

php fastcgi apc nginx segmentation-fault

9
推荐指数
1
解决办法
2万
查看次数

Flask:子目录中的静态文件

在我的烧瓶模板文件中,我包含一个css文件(我省略了样板文件),如下所示:

url_for('static', filename='css/bootstrap.css')

这将呈现为/static/css/bootstrap.css(由于前导斜杠)它被解释为domain.com/static/css/boostrap.css.不幸的是,实际的static文件夹位于一个子目录中:domain.com/projects/test/static/

环境细节:

我的fcgi文件位于~/fcgi-bin文件夹中(主机特定我猜):

$ cat ~/fcgi-bin/test.fcgi
#!/usr/bin/env python2.7

import sys
sys.path.insert(0, "/home/abcc/html/projects/test")

from flup.server.fcgi import WSGIServer
from app import app

class ScriptNameStripper(object):
   def __init__(self, app):
       self.app = app

   def __call__(self, environ, start_response):
       environ['SCRIPT_NAME'] = ''
       return self.app(environ, start_response)

app = ScriptNameStripper(app)

if __name__ == '__main__':
    WSGIServer(app).run()
Run Code Online (Sandbox Code Playgroud)

和我的.htaccess位于domain.com/projects/test/

$ cat .htaccess 
<IfModule mod_fcgid.c>
   AddHandler fcgid-script .fcgi
   <Files ~ (\.fcgi)>
       SetHandler fcgid-script
       Options +FollowSymLinks +ExecCGI
   </Files>
</IfModule>

<IfModule mod_rewrite.c>
   Options …
Run Code Online (Sandbox Code Playgroud)

python fastcgi url-for flask

9
推荐指数
1
解决办法
1万
查看次数

Nginx:使用fastcgi_pass时覆盖主机头

我正在尝试覆盖使用fastcgi_pass时传递给基于php的应用程序(特别是Phabricator)的http主机头.
我在使用proxy_pass时发现了很多这样做的例子,但我似乎无法找到如何使用fastcgi_pass执行此操作的示例.具体来说,我希望代理的php应用程序将主机头看作"phabricator.localhost".

(这样做的原因是我想将几个不同的域与Phabricator webapp相关联,但它只允许一个域关联,并且它拒绝任何未创建该域的请求.)

我很擅长用FastCGI配置Nginx,所以我不确定fastcgi的工作原理.任何帮助表示赞赏.

这是我的Nginx服务器配置:

  server {
    server_name phabricator.localhost  www.example.com example.com;
    root /opt/phabricator/phabricator/webroot;

    location / {
      index index.php;
      rewrite ^/(.*)$ /index.php?__path__=/$1 last;
    }

    location = /favicon.ico {
      try_files $uri =204;
    }

    location /index.php {
    fastcgi_pass   localhost:9000;
    fastcgi_index   index.php;

    #### HERE ARE MY ATTEMPTS #####
    #proxy_set_header HOST phabricator.localhost;
    #fastcgi_param SERVER_NAME phabricator.localhost;
    #fastcgi_pass_header 'Host: phabricator.localhost';
    #fastcgi_pass_header 'Host: phabricator.localhost';
    #add_header Host phabricator.localhost;
    #proxy_set_header Host phabricator.localhost;
    #### END ATTEMPTS ####

    fastcgi_param  REDIRECT_STATUS    200;
    fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param  QUERY_STRING       $query_string;
    fastcgi_param  REQUEST_METHOD …
Run Code Online (Sandbox Code Playgroud)

php fastcgi nginx hostheader phabricator

9
推荐指数
1
解决办法
6669
查看次数

django,fastcgi:如何管理一个长时间运行的进程?

我继承了一个django + fastcgi应用程序,需要对其进行修改以执行冗长的计算(最多半小时或更长时间).我想要做的是在后台运行计算并返回"你的工作已经开始" - 类型的响应.当进程正在运行时,对URL的进一步命中应返回"您的作业仍在运行",直到作业完成,此时应返回作业的结果.对url的任何后续命中都应该返回缓存的结果.

我是django的一个新手,并且在十年内没有做过任何重要的网络工作,所以我不知道是否有内置的方法来做我想要的.我已经尝试通过subprocess.Popen()启动该过程,并且它工作正常,除了它在进程表中留下一个已解除的条目.我需要一个干净的解决方案,一旦完成就可以删除临时文件和进程的任何痕迹.

我也尝试过fork()和线程,但还没有找到可行的解决方案.对于我来说似乎是一个非常常见的用例,是否有规范的解决方案?FWIW这只会在流量非常低的内部服务器上使用.

python django fastcgi

8
推荐指数
1
解决办法
3388
查看次数

IIS上的Django:django.core.exceptions.AppRegistryNotReady:尚未加载应用程序

我一直在玩微软的Django tutoiral,它在我的Visual Studio 2015环境中使用Python 3.4.3运行良好.当我尝试通过我的网络服务器运行它时,它失败了:

Error occurred:

Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\wfastcgi.py", line 805, in main
    result = handler(record.params, response.start)
  File "C:\Python34\lib\site-packages\django\core\handlers\wsgi.py", line 158, in __call__
    self.load_middleware()
  File "C:\Python34\lib\site-packages\django\core\handlers\base.py", line 51, in load_middleware
    mw_class = import_string(middleware_path)
  File "C:\Python34\lib\site-packages\django\utils\module_loading.py", line 20, in import_string
    module = import_module(module_path)
  File "C:\Python34\lib\importlib\__init__.py", line 109, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
  File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
  File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
  File "<frozen …
Run Code Online (Sandbox Code Playgroud)

python iis django fastcgi

8
推荐指数
1
解决办法
1638
查看次数