2016-04-26 68 views
1

我有一个在服务器上执行的脚本。 此脚本重命名文件以将其移至嵌套目录。PHP:rename()默默地失败,但返回true

的脚本位于: /无功/网络/虚拟主机/ XXXXX/httpdocs资料/ XXXXX/import_export /订单

该文件应该被移动和重命名为: /无功/网络/虚拟主机/ XXXXX/httpdocs资料/ XXXXX/import_export /命令/备份

权限上的备份目录是755

这里是我的代码:

$now = time(); 
$dateString = date('d-m-Y', $now); 
$newFileName = '/var/www/vhosts/XXXXX/httpdocs/XXXXX/import_export/orders/backup/orders-' . $dateString . '.csv'; 
$result = rename('orders.csv', $newFileName); 
var_dump($result); 

此代码返回true,但该文件仍然存在于源文件夹中,并且尚未移至备份文件夹。

如果我在本地主机上执行脚本,重命名和移动工作得很好。

出了什么问题?

+2

注意:'$ now'业务是毫无意义的。如果你没有提供时间值,'date()'默认使用“now”。 –

+0

您是否尝试过指定orders.csv的完整路径? –

+1

http://php.net/manual/en/function.error-reporting.php –

回答

0

您应该尝试提供两个参数中的完整路径,例如

$basePath = '/var/www/vhosts/XXXXX/httpdocs/XXXXX/import_export/orders'; 
$currentFileName = $basePath . '/order.csv'; 
$newFileName = $basePath . '/backup/orders-' . $dateString . '.csv'; 
$result = rename($currentFileName, $newFileName); 
+5

最好包含一个代码示例或对您如何认为问题可以解决的更深入的解释。否则,您的答案可能会被标记为低质量。 –

0

这是一个好主意file_exists()is_writable()做一些安全检查,如下事前。您也可以显示与error_get_last()如果rename()返回false错误如下:

if (!rename('orders.csv', $newFilename)) { 
    $error = error_get_last(); 
    // TODO: DO something with $error 
} 
0

PHP:重命名()静静地失败,但返回true

为了调试设置error_reporting(E_ALL);ini_set('display_errors', '1');您脚本正确,即:

<?php 
//comment on production mode 
error_reporting(E_ALL); 
ini_set('display_errors', '1'); 
// the rest of the code... 

rename您的rename块似乎缺少原始文件的完整路径,另外,date块是冗余。你可能想,如果目标目录is _writable()使用rename()前检查,这里就是我想要做的:

<?php 
date_default_timezone_set("Europe/Lisbon"); // Set the default timezone to avoid warnings 
$dateString = date('d-m-Y'); // no neeed for $now here, it's redundant 
$destDir = "/var/www/vhosts/XXXXX/httpdocs/XXXXX/import_export/orders/backup/"; 
$destFn = "orders-{$dateString}.csv"; 
if(is_writable($destDir)){ //check if the destination dir is writable 
    $result = rename('/full/path/to/orders.csv', $destDir.$destFn); // we need to set the full path of "orders.csv" 
    var_dump($result); 
}else{ 
    echo "destination dir not writable"; 
}