首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速and、php和外部命令的执行(主要转换)不起作用

快速and、php和外部命令的执行(主要转换)不起作用
EN

Stack Overflow用户
提问于 2016-02-19 00:24:52
回答 1查看 667关注 0票数 1

自从我切换到使用Apache2.4和php的快速cgi之后,我正在疯狂地试图找出一个问题。

我过去运行convert时,mod_php没有问题,但是由于我切换了,所以没有任何错误,脚本只是不能正常工作。

例如,如果我试图在mod_php下运行以下命令,那么它在快速cgi下就不能运行:

代码语言:javascript
复制
( ulimit -u 500 ; ulimit -m 307200 ; ulimit -v 614400 ; ulimit -f 307200 ; ulimit -t 30 ; nice -n 10 /usr/local/bin/convert -limit time 10 -limit memory 512Mb -background transparent  "/path_a/1568/15684771/uploaded_as/_web_upload_21fmupicf34eekkuer5cm7hic0.pdf_20160218_56c61b5383271_web_safe.png"  -background transparent -interlace PLANE  -resize "305x300"  -strip +repage  -depth 6 -quality 80 /path_b/tmp/cached_images/30/72/li15684771684e24cdc9648c33e9ccc880b0356c8455652d0e697171e627f3b729b90aa4a3.png 2>/dev/null )

现在,另一个使用相同权限访问相同路径的命令正常工作:

代码语言:javascript
复制
( ulimit -u 500 ; ulimit -m 307200 ; ulimit -v 614400 ; ulimit -f 307200 ; ulimit -t 30 ; nice -n 10 /usr/local/bin/convert -limit time 10 -limit memory 512Mb -quiet -background transparent  "/path_a/1568/15684767/uploaded_as/CC.PNG_20160218_56c61d465e8a3_web_safe.png"  -background transparent -interlace PLANE  -resize "311x300"  -strip +repage  -depth 6 -quality 80 /path_b/tmp/cached_images/11/24/li156847675bcf6aa92d8ce5e08b8a0d995fbd59ff590ab3d7cd543a2c1392c803547904f6.png 2>/dev/null )

我认为这与ulimit有关,因此我创建了一个简单的sh脚本,并试图执行相同的命令,它们都能工作。

当我测试apache时,它们之间的区别如下:

代码语言:javascript
复制
#FAST CGI
LoadModule fastcgi_module     libexec/apache24/mod_fastcgi.so
LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so

#MOD_PHP
LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so
LoadModule php5_module        libexec/apache24/libphp5.so

我有一个特定的apache-php文件,我不会更改:

代码语言:javascript
复制
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
<IfModule fastcgi_module>
    #fast-cgi
    FastCgiConfig -maxClassProcesses 100 -maxProcesses 100 -idle-timeout 200
    ScriptAlias /cgi-bin/ "/my_path_to/cgi-bin/"
    AddHandler php5-fastcgi .php .html
    Action php5-fastcgi /cgi-bin/php.cgi
    <Location "/cgi-bin/php.cgi">
       Order Deny,Allow
       Deny from All
       Allow from env=REDIRECT_STATUS
       Options ExecCGI
       SetHandler fastcgi-script
    </Location>
</IfModule>

<IfModule php5_module>
    #mod-php
    AddHandler php5-script .php .html
</IfModule>

最后,这是我的php-cgi文件:

代码语言:javascript
复制
#!/bin/sh
# Shell Script To Run PHP5 using mod_fastcgi under Apache 2.x
# Tested under FreeBSD 6.x and 7.x
### Set PATH ###
PHP_CGI=/usr/local/bin/php-cgi
PHP_FCGI_CHILDREN=4
PHP_FCGI_MAX_REQUESTS=5000

### no editing below ###
export PHP_FCGI_CHILDREN
export PHP_FCGI_MAX_REQUESTS
#export USE_ZEND_ALLOC=0
exec $PHP_CGI

apache的mpm指令如下:

代码语言:javascript
复制
<IfModule mpm_prefork_module>
    MaxMemFree           10000
    StartServers           100
    MinSpareServers         10
    MaxSpareServers         50
    GracefulShutDownTimeout  2
    MaxRequestsPerChild   1000
    MaxClients            1000
    MaxRequestWorkers     1000
</IfModule>

<IfModule mpm_event_module>
    MaxMemFree           10000
    StartServers            10
    MinSpareThreads         75
    MaxSpareThreads        250
    ThreadsPerChild         25
    MaxRequestWorkers     1000
    MaxConnectionsPerChild   0
    GracefulShutDownTimeout  2
    MaxClients            1000
</IfModule>

我甚至开始有问题运行这个:

代码语言:javascript
复制
ulimit -u 500 ; ulimit -m 307200 ; ulimit -v 614400 ; ulimit -f 307200 ; ulimit -t 30 ; nice -n 10 /usr/local/bin/convert -list format | grep -E ' +r[w+-]{2} +' | awk '{print $1}' | sed 's/\*//g

但如果我当时运行的话,它就没有问题了

代码语言:javascript
复制
ulimit -u 500 ; ulimit -m 307200 ; ulimit -v 614400 ; ulimit -f 307200 ; ulimit -t 30 ; nice -n 10 /usr/local/bin/convert -list format >file.a
ulimit -u 500 ; ulimit -m 307200 ; ulimit -v 614400 ; ulimit -f 307200 ; ulimit -t 30 ; nice -n 10 grep -E ' +r[w+-]{2} +' file.a > file.b
ulimit -u 500 ; ulimit -m 307200 ; ulimit -v 614400 ; ulimit -f 307200 ; ulimit -t 30 ; nice -n 10 awk '{print $1}' file.b
/*
* here I just simply grab the content and do a str_replace
* it is not permissions on sed as I did it with a 4th line and
*   sed but it was a bit of an overkill)
*/

我尝试使用以下方法执行这些命令:

代码语言:javascript
复制
proc($cmd, 'r');
`$cmd`;
exec($cmd);
etc...

他们都在mod_php下与mod_php一起工作

php.ini的内存限制设置为256米,以防有问题。我试着把它增加到512米,甚至1G,只是为了测试这是否是问题所在,但它并没有改变。这也不是一个超时问题,因为通过命令行和php脚本执行不到1秒。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-25 16:40:55

我想出来了!执行的路径是不同的,所以我假设某些库不能被转换程序或其他使用的程序调用和包含。

我更改了我的php-cgi文件,使其包括以下内容:

代码语言:javascript
复制
PATH=$PATH:/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin
export PATH

我当前的php-cgi文件如下:

代码语言:javascript
复制
#!/bin/sh
# Shell Script To Run PHP5 using mod_fastcgi under Apache 2.x
# Tested under FreeBSD 6.x and 7.x
### Set PATH ###
PHP_CGI=/usr/local/bin/php-cgi

### no editing below ###
PATH=$PATH:/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin
export PATH
export PHP_FCGI_CHILDREN=0
export PHP_FCGI_MAX_REQUESTS=10000
#export USE_ZEND_ALLOC=0
exec $PHP_CGI

现在一切都正常了。

您可能需要调整您到操作系统的路径。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35495144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档