【问题标题】:How to use file_put_contents in PHP for a Windows absolute path?如何在 PHP 中使用 file_put_contents 作为 Windows 绝对路径?
【发布时间】:2016-08-11 18:06:40
【问题描述】:

出于某些原因,我希望将一些数据存储在可移动存储设备(即 USB 记忆棒)中。我安装了 WAMP 包,它有它的 .../www/ 文件夹,脚本可以在其中编辑文件等。我希望我的服务器能够从/向可移动存储中的另一个文件夹读取/写入文件.

我已经尝试过相对路径,并且可以看到file_put_contents 可以与www/ 之外的文件夹一起使用(可能是安全问题的原因..)。但是,我的可移动存储是 Windows 中的 E:\ 驱动器,所以要写在那里,我需要使用绝对路径。我试过像

一样直接使用 Windows 绝对路径
file_put_contents("C:\existing\path\copied\from\explorer\new_file.txt","Stage 3, successfully written");

(首先在C:\ 上区分是否由于路径不起作用或禁止写入另一个存储而导致写入失败)并且失败。

那么,有可能吗?我应该使用什么来代替在 Windows 资源管理器中编写的路径?或者我应该使用另一个功能来实现这一点?或者使用 Apache config 给该路径一个别名?

关键是可移动存储应该可以在任何时候安全地移动,除了读/写的时刻。

PS 感谢 ÁlvaroGonzález,我发现我只是忘记在从资源管理器复制的绝对路径中转义 \ 符号,这就是写入它直接失败的原因。

【问题讨论】:

  • 将别名添加到可移动驱动器很危险,好像它不存在 Apache 将无法启动
  • 我在 Windows 上开发的每个 PHP 项目都使用绝对路径。他们完美地工作。事实上,它们比在 Windows 本身中工作得更好,因为我可以同时使用 / 和 `\` 作为目录分隔符。您能否编辑问题并解释什么代码失败以及究竟是如何失败的?如果出现空白屏幕,请了解如何配置 PHP 以显示错误消息。
  • @ÁlvaroGonzález 谢谢,你是对的。我从资源管理器复制了路径而没有转义反斜杠。我认为,这是一个比使用符号链接更好的解决方案。你也可以回答这个问题,但我不确定是否可以重新接受,我至少可以为你的回答 +1。
  • 我认为您可以按照建议编辑问题,以便问题清晰,或者用不同的术语重写以匹配接受的答案(例如“如何访问可移动设备”)。就目前而言,对于将来在这里谷歌寻求帮助的人来说,这是相当混乱的,因为它错误地表明 PHP 在驱动器号方面存在问题。

标签: php windows apache wampserver


【解决方案1】:

只是一个小小的语法问题:

var_dump("C:\existing\path\copied\from\explorer\new_file.txt");

... 打印类似:

string(46) "C:xisting\path\copiedromxplorer
ew_file.txt"

...因为您很不幸地使用了双引号字符串和现有的escape sequences

  • \e 转义(十六进制 1B)
  • \f换页(十六进制 0C)
  • \n 换行符(十六进制 0A)

一些有效的替代方案:

  • 'C:\existing\path\copied\from\explorer\new_file.txt'
  • "C:\\existing\\path\\copied\\from\\explorer\\new_file.txt"
  • "C:/existing/path/copied/from/explorer/new_file.txt"

【讨论】:

    【解决方案2】:

    在您的 WAMP /www/ 目录中创建一个单独的目录,并在您需要的任何地方建立一个符号链接。一些不错的阅读:http://www.tuxera.com/community/ntfs-3g-advanced/junction-points-and-symbolic-links/

    【讨论】:

    • 再一次,当可移动驱动器被移除时,这种方法会发生什么?
    • 你让我犹豫了一下,所以我继续测试了:) 当然,当棒没有插入时,目标将不可用。但符号链接本身不会被删除什么的。
    • 所以他/她必须设计一个测试来证明在尝试写入之前棒在里面
    • 嗯,是的,必须插入存储棒。正如 OP 所说“我希望将一些数据存储在可移动存储中”,因此无论使用哪种解决方案都必须使用存储棒。但你的意思到底是什么? :)
    • PS 那些将尝试这个的人应该知道如何“安全地”删除符号链接 (superuser.com/questions/167076/how-can-i-delete-a-symbolic-link),这对我有好处,我已经知道了。
    猜你喜欢
    • 2011-07-23
    • 2015-04-09
    • 1970-01-01
    • 2022-11-16
    • 2012-03-16
    • 2015-08-29
    • 2016-01-07
    • 2012-09-30
    • 1970-01-01
    相关资源
    最近更新 更多