代码之家  ›  专栏  ›  技术社区  ›  Dimitrios Mistriotis

Zend框架:无法访问已经存在的文件

  •  0
  • Dimitrios Mistriotis  · 技术社区  · 15 年前

    我正在尝试读取一个使用Zend框架机制上载的文件并将其发回浏览器。

    文件已正确上载到所需位置,正如我所检查的

    su www-data 
    

    在一个ls和一个cat之后,web用户可以正确地阅读和修改它。

    问题是,当我试图:

    if(!file_exists($fileName)) {
    die("File ($fileName) wasnt set or it didnt exist");
    }
    

    虽然$filename是一个字符串,但是我总是会死(…),当我显示它的位置时,我总是可以(如前所述)从命令行中读取它。

    输出:

    $ ls -lah
    total 112K
    drwxr-xr-x 2 www-data www-data 4.0K 2009-10-07 18:21 .
    drwxr-xr-x 3 www-data www-data 4.0K 2009-10-07 13:57 ..
    -rw-r--r-- 1 www-data www-data  70K 2009-10-07 17:33 Eclipse_Icon_by_TZR_observer.png
    -rw-r--r-- 1 www-data www-data  27K 2009-10-07 18:24 eclipse_logo2.png
    

    统计输出:

    stat() [function.stat]: stat failed for .../eclipse_logo2.png
    

    我看到了一个与“尝试30天”网站非常相似的问题,所以这不是发生在我身上的事情…

    有什么想法吗?

    1 回复  |  直到 15 年前
        1
  •  0
  •   raspi    15 年前

    你必须 chmod 新创建的文件,因为从PHP端创建的文件所有者将是Apache(group:www-data、httpd、www或类似的东西)。所以下次PHP不能访问这个文件,因为www数据拥有它,并且它有错误的权限。

    Here's how you create new files so that you can access them later.
    <?php
    $path = '/path/to/new/file';
    touch($path)
    chmod($path, 0777);
    // TRY to change group, this usually fails
    @chgrp($path, filegroup(__FILE__)); 
    // TRY to change owner, this usually fails
    @chown($path, fileowner(__FILE__));