【问题标题】:Local Account Cannot Access Files on Server Path in PHP本地帐户无法访问 PHP 中服务器路径上的文件
【发布时间】:2014-07-04 04:10:55
【问题描述】:

我正在使用opendirreaddir 来显示我们文件共享服务器上的可用文件列表:

// defined in config.ini file:
error_reporting(E_ERROR | E_PARSE | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR);
ini_set('display_errors', true);
ini_set('display_startup_errors', true);

define('DRAWINGS_PATH', "\\\\Files\\shared\\Engineering\\Drawings\\");

$all_files = array();
if ($handle = opendir(DRAWINGS_PATH)) {
    while (($file = readdir($handle)) !== false) {
        $lc_file = strtolower($file);
        $dwg = strchr($lc_file, '.dwg');
        $pdf = strchr($lc_file, '.pdf');
        if (($dwg == '.dwg') || ($pdf == '.pdf')) {
            //$all_files[] = new HTMLForm_SelectOption('', $file);
            // I use the line above, but it's the same as the one below.
            $all_files[] = $file;
        }
    }
    closedir($handle);
}

当我在本地 PC 上进行测试时,我会看到该文件夹​​中的所有文件。

当我将它推送到服务器时,它什么也看不到。

这听起来像是名为 Apache 的本地帐户,无法访问我需要读取它的网络文件夹。

当我被远程访问服务器时,运行我们的网络服务器的本地帐户似乎可以访问。

我看到的唯一内容是一台 PC 上的用户帐户显示 Apache,而授予文件夹权限的用户名是 FILES\Apache 并显示 Apache Web Server -但我们的网络人员说这些是同一个帐户。

我还能检查什么?

[更新]来自 php_info():PHP Version 5.3.10

[UPDATE 2]显示来自config.ini 文件的信息

[更新 3]

设置HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\Re‌​strictNullSessAccess = 0 没有解决这个问题。

我可以使用 Apache 帐户远程登录服务器,并查看我需要访问的文件:

但是,当我尝试让 Apache 帐户读取这些文件以便它们可以显示在网页上时,我收到以下错误:

警告:opendir(\Files\shared\Engineering\Drawings,\Files\shared\Engineering\Drawings):访问被拒绝。 (代码:5)在 C:...\FormView.php 中的第 183 行警告:opendir(\Files\shared\Engineering\Drawings): failed to open dir: No such file or directory

【问题讨论】:

    标签: php apache


    【解决方案1】:

    如果您还没有解决这个问题...并且对您的网络人员表示充分尊重,DEV-WEB01 上的用户帐户 Apache (很可能)与用户帐户 Apache Web Server 不同FILESHARE01\Apache.

    我会敦促你的网络人员将用户 Apache 添加到 FILESHARE01\Apache

    【讨论】:

    • 同意。这听起来像是典型的 Apache 用户不匹配问题。
    • 我们的网络人似乎认为这是原因。他正在调查它。谢谢!
    【解决方案2】:

    PHP 安全模式是否开启?如果是这样,您将无法访问任意路径,除非先在 php.ini 中指定它。此外,如果您在 PHP 手册中说应该出现错误时没有收到任何错误,请确保没有禁用错误显示 - 再次在 php.ini 中。

    【讨论】:

    • 不,它显示safe_mode = Off。顺便说一句,我们也在运行 PHP 版本 5.3.10,所以安全模式仍在使用中。
    • opendir() 至少会在错误时引发 E_WARNING,根据上面的 sn-p,您不会输出该错误。尝试添加 E_WARNING、E_NOTICE(或将它们全部输出一分钟!),重新启动 Apache 并再次尝试查看抛出的错误。然后他们应该为您指出麻烦的方向。
    • 所以,这是一个“拒绝访问”错误,但它并没有告诉我拒绝它的用户是谁。显然它一定是 Apache,但现在我只是被困住了,“为什么这个帐户不能访问文件夹?”
    • 您可能对此链接感兴趣:stackoverflow.com/questions/1153824/… 它已经过时了,但它可能仍然有效(我不使用 Windows 服务器,所以此时我不在我的联盟中。 ..!)
    • 设置HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\RestrictNullSessAccess = 0 似乎还没有工作,但我会看看它带我去哪里。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    • 2014-06-22
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 2015-12-14
    相关资源
    最近更新 更多