>백엔드 개발 >PHP 튜토리얼 >cakephp的环境配置问题

cakephp的环境配置问题

WBOY
WBOY원래의
2016-06-23 13:36:371897검색

新手求高手指导,目前在做项目,一天都没有搞定,很急。
环境:Linux(el7)+nginx(1.6.2)+mysql(5.6.23)+php(5.4.39)+cakephp(2.6.0)
web环境本身没有问题,访问http://172.16.3.91:8080/cake报错:
Warning: _cake_core_ cache was unable to write 'cake_dev_zh-cn' to File cache in /usr/share/nginx/dataCenter/lib/Cake/Cache/Cache.php on line 323

Warning: /usr/share/nginx/dataCenter/app/tmp/cache/persistent/ is not writable in /usr/share/nginx/dataCenter/lib/Cake/Cache/Engine/FileEngine.php on line 385

Fatal error: Uncaught exception 'CacheException' with message 'Cache engine _cake_core_ is not properly configured.' in /usr/share/nginx/dataCenter/lib/Cake/Cache/Cache.php:181 Stack trace: #0 /usr/share/nginx/dataCenter/lib/Cake/Cache/Cache.php(151): Cache::_buildEngine('_cake_core_') #1 /usr/share/nginx/dataCenter/app/Config/core.php(374): Cache::config('_cake_core_', Array) #2 /usr/share/nginx/dataCenter/lib/Cake/Core/Configure.php(72): include('/usr/share/ngin...') #3 /usr/share/nginx/dataCenter/lib/Cake/bootstrap.php(175): Configure::bootstrap(true) #4 /usr/share/nginx/dataCenter/app/webroot/index.php(100): include('/usr/share/ngin...') #5 {main} thrown in /usr/share/nginx/dataCenter/lib/Cake/Cache/Cache.php on line 181

1. 已经确认tmp目录上级和下面的子目录全部都设置了777权限;
2. cakephp(从官方网站下载的)除了修改了数据库配置外,其他的配置项没有动;
3. nginx.conf(参考官方文档设置的rewrite)
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user  nobody;
worker_processes  1;

error_log  /var/log/nginx/error.log info;
#error_log  /var/log/nginx/error.log  notice;
#error_log  /var/log/nginx/error.log  info;

pid        /run/nginx.pid;

worker_rlimit_nofile 65535;
events {
        use epoll;
    worker_connections  4096;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    root         /usr/share/nginx/html;
        #单位:秒
        keepalive_timeout  100;
        #keepalive_timeout  1000;

    #gzip  on;

    index   index.html index.htm;
        #uwsgi_buffering         off;
        #uwsgi_max_temp_file_size  64m;
    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       8080;
                #server_name  localhost;
        server_name  172.16.3.91  shuju.baijie;
                rewrite 301 http://172.16.3.91:8080$request_uri permanent;

                root         /usr/share/nginx/dataCenter/app/webroot;
        index    index.php index.html index.htm;

        #charset koi8-r;
        charset utf-8;

        access_log  /var/log/nginx/dataCenter.access.log;
        error_log  /var/log/nginx/dataCenter.error.log;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
                        try_files $uri $uri/ /index.php?$args;
                    if (-e $request_filename) {   #文件或目录存在
                                break;
                        }
                        if (!-e $request_filename) {   #文件或目录不存在
                                rewrite ^/(.+)$ /index.php?url=$1 last;
                                                break;
                        }
                }
                location ~ /\.ht {   #禁止.htaccess
                                        deny all;
                }

                location ~ \.php$ {
                        try_files $uri =404;
                        #这里指定了fastcgi进程侦听的端口,nginx就是通过这里与php交互的
                        fastcgi_pass    127.0.0.1:9000;            
                        fastcgi_index   index.php;            
                        fastcgi_param   SCRIPT_FILENAME  $document_root/$fastcgi_script_name;            
                        include                 fastcgi_params;       
                }
        # redirect server error pages to the static page /40x.html
        #
        error_page  404              /404.html;
        location = /40x.html {
        }

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
        }
        }
    
        server {
        listen       8081;
                #server_name  localhost;
        server_name  172.16.3.91  shuju.baijie;
        root         /usr/share/nginx/mytest;
        index    index.php index.html index.htm;

        #charset koi8-r;
        charset utf-8;

        access_log  /var/log/nginx/mytest.access.log;
        error_log  /var/log/nginx/mytest.error.log;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location /phpmyadmin/ {
                                index index.php;
                }
                location ~ \.php$ {
                        #这里指定了fastcgi进程侦听的端口,nginx就是通过这里与php交互的
                        fastcgi_pass    127.0.0.1:9000;            
                        fastcgi_index   index.php;            
                        fastcgi_param   SCRIPT_FILENAME  $document_root/$fastcgi_script_name;            
                        include                 fastcgi_params;       
                }
        }
}


回复讨论(解决方案)

Warning: /usr/share/nginx/dataCenter/app/tmp/cache/persistent/ is not writable in /usr/share/nginx/dataCenter/lib/Cake/Cache/Engine/FileEngine.php on line 385
已经明确的表示说
/usr/share/nginx/dataCenter/app/tmp/cache/persistent/ 不可写
这是个目录,而写缓存应该是文件名吧

谢谢 xuzuning 的回复。
persistent确实应该是目录的,不是文件,问题应该不在这里:
383         if ($this->_init && !($dir->isDir() && $dir->isWritable())) {
384             $this->_init = false;
385             trigger_error(__d('cake_dev', '%s is not writable', $this->settings['path']), E_USER_WARNING);
386             return false;
387         }

求各位牛人关注!

找到原因了,我的php.ini中配置cgi.force_redirect原来使用的是默认值(默认打开),设置cgi.force_redirect  = 0将该配置关闭后,重启nginx和php-fpm就能正确获取writeable的值了。看php.ini中该配置项的注释,当打开时,php以安全的方式运行在web服务中。

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:数字类型问题다음 기사:php多次调用递归函数