gpt4 book ai didi

php - PHP 中 rename() 的奇怪行为

转载 作者:可可西里 更新时间:2023-11-01 13:26:41 25 4
gpt4 key购买 nike

我的 php.ini 有一个奇怪的问题。每当我尝试使用 rename() 移动文件时,不仅文件没有移动,而且应该将其复制到的目录以及其中的所有文件都被删除。原代码为:

rename('temp.odt', 'tmp/report.odt');

但我已经尝试过其他路径分隔符,例如

rename('temp.odt', 'tmp\report.odt');

rename('temp.odt', 'tmp\\report.odt');

rename('temp.odt', 'tmp' . DIRECTORY_SEPARATOR . 'report.odt');

rename('C:\wamp\www\zaiko\temp.odt', 'C:\wamp\www\zaiko\tmp\report.odt');

一切都无济于事。该代码来 self 正在使用的系统中使用的第 3 方模块。

正确检查点:

  1. 文件“temp.odt”确实存在于当前目录中;
  2. 目录'tmp' 确实存在并且其中有几个文件。它也不是只读的。
  3. 目标文件不存在(实际文件名有时间戳,为了简单我在这里缩减了)

运行 rename() 后,'temp.odt' 文件在其原始位置完好无损,而文件夹 'tmp' 以及其中的所有内容都消失了。发出以下警告:

( !) 警告:重命名(temp.odt,tmp\report.odt)[function.rename]:系统找不到指定的路径*。 (代码:3)在 C:\wamp\www\zaiko\modules\mod_deliver.php 第 192 行

*翻译自葡萄牙语

正在运行:Apache 2.2.17 和 PHP 5.3.5 在带有 NTFS 的 Windows XP 上


编辑:

刚找到问题的原因。事实证明,应用程序使用的模块反过来使用了一个压缩库;该库使用一个与应用程序使用的名称完全相同的临时文件夹。

它必须使用某种缓存,这可以解释为什么错误没有出现 100% 次。

通过将“tmp”文件夹的名称更改为其他名称解决了问题。

感谢大家抽出时间,很抱歉用这么愚蠢的事情来打扰你们,事实证明,这与我最初的猜测完全无关,因此也与提出的问题无关。

最佳答案

PHP.net 上的示例告诉您确切的操作 - 使用文件的 ROOT PATH - 通常这可以通过使用 $_SERVER['DOCUMENT_ROOT'] 获得(但这只会进入 htdocs/public_html 目录 - 你需要指定其余部分)或手动输入路径(但尽量避免这种情况)。

<?php
rename("/tmp/tmp_file.txt", "/home/user/login/docs/my_file.txt");
?>

猜测,以下应该有效(假设这是你的路径)——这也会检查你的文件是否确实存在,以便它可以重命名——你需要确保 tmp/ 确实存在首先,但如果没有,你会弹出一个错误:

<?php

$root = getcwd().DIRECTORY_SEPARATOR; // Obtain the current working dir
$srcpath = $root."temp.odt"; // The file you want to rename
$destpath = $root."tmp/report.odt"; // Where you want to rename the file to

// make sure file exists and its movable
if(is_writable($srcpath)){
// if it exists, rename it
rename($srcpath, $dstpath);
echo "File was renamed!";
} else {
echo "It seems that the specified file doesn't exist!";
}
?>

您使用反斜杠转义字符 - 始终使用正斜杠(我知道这是在单引号内,没关系,但如果您使用双引号,那么您会想知道出了什么问题)!

关于php - PHP 中 rename() 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9257127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com