【问题标题】:Accessing a Windows Share using PHP使用 PHP 访问 Windows 共享
【发布时间】:2010-11-29 12:29:45
【问题描述】:

我需要使用 PHP 访问 Windows 共享上的 Excel 文件,但似乎遇到了身份验证问题。

我正在使用PHP-ExcelReader 打开和读取文件。在我的本地机器上工作正常,但我放置它的服务器没有访问此共享的权限,所以它告诉我路径不可读!

我什至不确定访问此共享的路径是否正确:

    $file_to_include = "\\\\10.9.8.7\depts$\ExcelFile.xls";

但正如我所说,它可以在我的机器上运行,所以我很满意。

有什么方法可以在这里添加我的凭据吗?

【问题讨论】:

标签: php authentication windows-share


【解决方案1】:

路径 \\10.9.8.7\depts$\ExcelFile.xls 必须可供客户端本地访问,因为 PHP 不支持 SMB。

编辑:至少不是原生的,试试smb4php

【讨论】:

  • +1 感谢分享这个,虽然 smb4php 现在已经过时了,一个很好的替代品是下面的smorgasbork.com/component/content/article/34-web/…
  • 这并不完全正确。您可以简单地在 php 中打开 samba 共享(在 windows 中测试)。最重要的一点是,您必须转义反斜杠和美元等特殊字符(使用双引号时)
  • 你意识到答案已经超过 10 年了。
【解决方案2】:

你的路径是正确的。

您可以尝试的一件事是在服务器上共享驱动器,然后在每个用户计算机上映射共享驱动器(确保它们都是相同的驱动器号或名称),或者只是您的计算机。如果不是太多,用户计算机会更好,以防您外出或忘记验证。这样,当用户进行身份验证时,它会打开驱动器。然后,您可以通过以下方式调用驱动器:

$file_to_include = '\\\\'.$_SERVER['REMOTE_ADDR'].'\mappedDrive\file.xls';

【讨论】:

    【解决方案3】:

    您的路径是正确的,但请记住,在使用双引号时,$ amd 反斜杠是 php 中的特殊字符。

    所以你可以写:

    $file_to_include = '\\10.9.8.7\depts$\ExcelFile.xls';
    

    或者你使用双引号,但你在特殊符号之前添加了一个额外的反斜杠

    $file_to_include = "\\\\10.9.8.7\depts\\\$\\ExcelFile.xls";
    

    或者您可以使用正斜杠作为目录分隔符,但美元仍然必须转义

    $file_to_include = "\\\\10.9.8.7/depts/\$/ExcelFile.xls";
    

    关于authdata:如果你运行的是一个php文件,它通常会继承启动进程的权限。 这意味着,如果您已经在资源管理器中保存了此共享的身份验证并且您正在启动 php,则 php 文件会继承此已保存的权限。

    但是不要忘记,当您在网络服务器中运行 php 时,该网络服务器可能在不同的用户中运行,该用户与您当前登录的用户没有相同的权限。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多