【问题标题】:using space in readfile()在 readfile() 中使用空间
【发布时间】:2016-01-06 17:46:23
【问题描述】:

我正在尝试使用 readfile() 下载 xlsx 文件。 文件名是一个带有空格的字符串变量 ($costing_url),它是基于 href 的 ID 从 MySQL 数据库中提取的。

例子:

$costing_url="X:\Sys_Prod\WAResponse\Americas Division\2015\OMA - Mexico\ACA (vMUSE AOPS) AATC Costing 09-10-2015 ver(a).xlsx"

这个

readfile($costing_url);

--- 导致“无法打开流”错误。

这个

readfile("X:\Sys_Prod\WAResponse\Americas Division\2015\OMA - Mexico\ACA (vMUSE AOPS) AATC Costing 09-10-2015 ver(a).xlsx"); 

--- 工作得很好。

如果$costing_url 在路径/文件名示例中没有任何空格,则 A 工作正常。

研究表明,双引号需要容纳空格,这就是示例 B 证明的事实。

我的问题是我无法在readfile() 中正确转义双引号。我已经尝试了所有我能想到的方法,但是当我尝试引用它时它不会翻译字符串 ($costing_url)

感谢任何帮助。

【问题讨论】:

  • 你试过“${costing_url}”吗?
  • 第一个示例和第二个示例之间的路径字符串处理方式实际上没有区别。这使我相信两个示例之间的代码或运行代码的环境都存在差异。例如。不同的用户、CLI 与 SAPI、不同的环境等

标签: php readfile spaces


【解决方案1】:

它与空格没有任何关系。数据库中的字段在字段末尾有一个回车

如果其他人遇到类似问题,这里有更多细节:我修剪了字符串以删除尾随回车

$costing_url = rtrim(costing_url, "\r");

并且还将 readfile 行更改为

readfile((string)$costing_url);

【讨论】:

  • 我通常做的检查这个(作为一个快速的“十六进制”式编辑器)是使用urlencode,它将暴露这些字符。 var_dump(urlencode($var1)); var_dump(urlencode($var2));\r 的实例中it would've ended with %0D
【解决方案2】:

不要使用“\”,使用“/”

例如: $costing_url= "X:/Sys_Prod/WAResponse/Americas Division/2015/OMA - 墨西哥/ACA (vMUSE AOPS) AATC Costing 09-10-2015 ver(a).xlsx"

【讨论】:

    猜你喜欢
    • 2017-07-18
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多