PHP:rename()无提示失败但返回true

时间:2016-04-26 14:20:50

标签: php rename

我有一个在服务器上执行的脚本。 此脚本重命名文件以将其移动到嵌套目录。

该脚本位于: 的/ var / WWW /虚拟主机/ XXXXX /的httpdocs / XXXXX / import_export /订单

应移动文件并将其重命名为: 的/ var / WWW /虚拟主机/ XXXXX /的httpdocs / XXXXX / import_export /命令/备份

备份目录的权限是755

这是我的代码:

var fixHelperModified = function(e, tr) {
   var $originals = tr.children();
   var $helper = tr.clone();
   $helper.children().each(function(index) {
       $(this).width($originals.eq(index).width())
   });
   return $helper;
},
updateIndex = function(e, ui) {
    $('td.index', ui.item.parent()).each(function (i) {
        $(this).html(i + 1);
    });
};

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

如果我在本地主机上执行脚本,重命名和移动工作就可以了。

有什么问题?

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

使用file_exists()is_writable()预先进行一些安全检查是个好主意。如果rename()返回false,您还可以使用error_get_last()显示错误,如下所示:

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

答案 2 :(得分:0)

  

PHP:rename()无声地失败但返回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阻止似乎缺少原始文件的完整路径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";
}