【问题标题】:Apache file permissions for PHP but not for direct access [closed]PHP的Apache文件权限但不能直接访问[关闭]
【发布时间】:2013-06-05 16:26:31
【问题描述】:

我安装了一个 Apache 服务器并正在使用它。我不知道如何正确设置此设置的权限:

我不希望我的文件可以被外部访问(即./files/file1.foo) - 这个目录中有很多文件,我不希望人们能够阅读它们。到目前为止,一切都很好。 chmod o+r 启用阅读,反之亦然,就我而言。

然后我有一个 PHP 脚本来处理与每个用户的会话,每个用户拥有一个文件并且应该能够查看它,但只能查看它,而不是其他文件。假设文件是​​一张图片。我会写<?php ... echo "<img src=\"files/file5.foo\"> ?> 来显示这个文件。但这行不通,因为 PHP 也没有对该文件的权限。

有什么方法可以解决这个问题?

【问题讨论】:

    标签: php apache permissions


    【解决方案1】:

    对于这些要求,最好的解决方案是将受保护的文件存储在公共 HTML 之外,并使用 PHP 脚本来提供它们。然后 PHP 可以检查是否应该允许当前用户访问请求的文件。

    看看this example。对于内联图像,不要设置文件传输头,只输出内容(您仍然可以输出内容类型的头,但这不是必需的)。

    【讨论】:

    • 我无法让它工作。此代码仅向我显示损坏图像的图标<?php header('Content-Type: image/jpeg'); readfile('/IMG_9760.JPG'); ?> - 图像文件具有所有权限。如果我注释掉标题行,我得到的只是文件的文本转储。 ://
    • @MartinMelka 我怀疑该图像位于操作系统的根目录中。你确定路径正确吗?
    • @MartinMelka 正如 jeroen 建议的那样,检查文件的路径。还要检查是否没有输出空格(例如在<?php 标记之前),因为任何空格都会破坏文件的显示。还可以尝试发送content-length 标头,以便浏览器知道有多少数据即将到来。
    • 是的,它在根目录中,我把它放在那里只是为了测试一下。
    • 我想我找到了问题所在。我有一个带有一些文本的 html 页面,其中包含这个 php 脚本,只输出 readfile()。当我将脚本放入单独的 php 文件并放入 <img src=fetchimage.php> 时,它可以工作。我只是一个初学者,所以我不知道这个。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    相关资源
    最近更新 更多