Sér*_*ues 6 php windows rename file
我的php有一个奇怪的问题.每当我尝试使用rename()移动文件时,不仅不会移动文件,还会删除应该复制的文件以及其中的所有文件.原始代码是:
rename('temp.odt', 'tmp/report.odt');
Run Code Online (Sandbox Code Playgroud)
但我已经尝试过其他路径分隔符了
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');
Run Code Online (Sandbox Code Playgroud)
一切都无济于事.代码来自第三方模块,该模块在我正在使用的系统中使用.
好点检查点:
在运行rename()之后,'temp.odt'文件在其原始位置完好无损,而文件夹'tmp' 以及其中的所有内容都消失了.发出以下警告:
(!)警告:重命名(temp.odt,tmp\report.odt)[function.rename]:系统找不到指定的路径*.(代码:3)在第192行的C:\ wamp\www\zaiko\modules\mod_deliver.php中
*翻译自葡萄牙语
在Windows XP上运行:带有PHP 5.3.5的Apache 2.2.17和NTFS
编辑:
刚刚找到了问题的原因.事实证明,应用程序使用的模块又使用压缩库; 此库使用与应用程序使用的名称完全相同的临时文件夹.
它必须使用某种缓存,这可以解释为什么错误没有100%出现.
通过将'tmp'文件夹的名称更改为其他任何内容来解决问题.
感谢你们所有的时间,抱歉打扰你们这样一个愚蠢的事情,事实证明,这与我最初的猜测完全没有关系,因此,问题已经形成.
PHP.net上的示例准确地告诉您要做什么 - 使用文件的根路径 - 通常可以通过使用$_SERVER['DOCUMENT_ROOT'](但这仅转到 htdocs/public_html 目录 - 您需要指定其余部分)或手动获得输入路径(但尽量避免这种情况)。
<?php
rename("/tmp/tmp_file.txt", "/home/user/login/docs/my_file.txt");
?>
Run Code Online (Sandbox Code Playgroud)
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!";
}
?>
Run Code Online (Sandbox Code Playgroud)
您通过使用反斜杠转义字符 - 始终使用正斜杠(我知道这是在单引号内,这是可以的,但如果您使用双引号,那么您会想知道出了什么问题)!