PHP:rename()以静默方式失败,但返回true

PHP:rename()以静默方式失败,但返回true,php,rename,Php,Rename,我有一个在服务器上执行的脚本。 此脚本重命名文件以将其移动到嵌套目录 脚本位于: /var/www/vhosts/XXXXX/httpdocs/XXXXX/import\u export/orders 应将文件移动并重命名为: /var/www/vhosts/XXXXX/httpdocs/XXXXX/import\u export/orders/backup 备份目录的权限为755 这是我的密码: $now = time(); $dateString = date('d-m-Y', $now);

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

脚本位于: /var/www/vhosts/XXXXX/httpdocs/XXXXX/import\u export/orders

应将文件移动并重命名为: /var/www/vhosts/XXXXX/httpdocs/XXXXX/import\u export/orders/backup

备份目录的权限为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,但该文件仍存在于源文件夹中,并且尚未移动到备份文件夹

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


怎么了?

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

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

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

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

使用
file\u exists()
is\u writable()
预先进行一些安全检查是个好主意,如下所示。您还可以使用if
rename()
返回false显示错误,如下所示:

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

使用
file\u exists()
is\u writable()
预先进行一些安全检查是个好主意,如下所示。您还可以使用if
rename()
返回false显示错误,如下所示:

if (!rename('orders.csv', $newFilename)) {
  $error = error_get_last();
  // TODO: DO something with $error
}
PHP:rename()以静默方式失败,但返回true

设置
错误报告(E\u ALL)
ini_集('display_errors','1')以便正确调试脚本,即:

<?php
//comment on production mode
error_reporting(E_ALL);
ini_set('display_errors', '1');
// the rest of the code...
PHP:rename()以静默方式失败,但返回true

设置
错误报告(E\u ALL)
ini_集('display_errors','1')以便正确调试脚本,即:

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

注意:
$now
业务毫无意义
date()
如果不提供时间值,则默认使用“现在”。您是否尝试过为orders.csv指定完整路径?当您询问有关错误的问题时,请始终发布错误日志。要在php代码中启用错误报告,请附加
错误报告(E_ALL);ini_集('display_errors','1')在脚本的顶部,它返回什么?您是服务器的所有者吗?并且您有权通过运行代码来移动文件。注意:
$now
业务毫无意义
date()
如果不提供时间值,则默认使用“现在”。您是否尝试过为orders.csv指定完整路径?当您询问有关错误的问题时,请始终发布错误日志。要在php代码中启用错误报告,请附加
错误报告(E_ALL);ini_集('display_errors','1')在脚本的顶部,它返回什么?您是服务器的所有者吗?并且您有权通过运行代码来移动文件。我认为这是许可问题。最好包括一个代码示例或更深入的解释,说明你认为如何解决这个问题。否则,您的答案可能会被标记为低质量。最好包含一个代码示例或更深入的解释,说明您认为问题可以如何解决。否则,您的答案可能会被标记为低质量。