jFile:move在移动文件失败时不会导致任何错误

时间:2012-10-20 18:01:14

标签: joomla joomla2.5

我实际设法为我制作的插件和安装脚本文件制作安装zip,我在安装功能中包含此代码,以便将joomla中的文件夹中的某些文件复制到另一个目录中。

class plgVmCustomPayeddownloadsInstallerScript {

   function install($parent) {

        $src = "plugins/vmcustom/payeddownloads/payeddownloads.php";
        $destination = "components/com_virtuemart/controllers";     
        if(!JFile::move($src, $destination,JPATH_ROOT)){
            echo "tried to move from ".$src." to ".$destination;
            return false;
    }
}

安装后我不断在joomla中收到错误,“无法重命名文件”并且安装函数命令移动的文件没有,尽管install.xml中的文件确实存在实际上得到了正确的安装和安装。

同样在安装脚本中我在安装函数中包含了一些正常执行的sql而没有任何问题。

我也尝试过postflight功能但没有成功。 另外,我没有从php_error.log

获得任何特定的错误

我还尝试在我的joomla安装的根应用程序中使用上面的tester.php文件创建这个奇怪的测试。

<?php
/**
 * @package     Joomla.Site
 * @copyright   Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

// Set flag that this is a parent file.
define('_JEXEC', 1);
define('DS', DIRECTORY_SEPARATOR);

if (file_exists(dirname(__FILE__) . '/defines.php')) {
    include_once dirname(__FILE__) . '/defines.php';
}

if (!defined('_JDEFINES')) {
    define('JPATH_BASE', dirname(__FILE__));
    require_once JPATH_BASE.'/includes/defines.php';
}

require_once JPATH_BASE.'/includes/framework.php';

// Mark afterLoad in the profiler.
JDEBUG ? $_PROFILER->mark('afterLoad') : null;

// Instantiate the application.
$app = JFactory::getApplication('site');

// Initialise the application.
$app->initialise();

// Mark afterIntialise in the profiler.
JDEBUG ? $_PROFILER->mark('afterInitialise') : null;

// Route the application.
$app->route();

// Mark afterRoute in the profiler.
JDEBUG ? $_PROFILER->mark('afterRoute') : null;

// Dispatch the application.
$app->dispatch();

// Mark afterDispatch in the profiler.
JDEBUG ? $_PROFILER->mark('afterDispatch') : null;

// Render the application.
$app->render();

// Mark afterRender in the profiler.
JDEBUG ? $_PROFILER->mark('afterRender') : null;


    //plugins/vmcustom/payeddownloads/payeddownloads.php to 
    //components/com_virtuemart/controllers
    jimport('joomla.filesystem.file');
    $src = JPATH_ROOT."/plugins/vmcustom/payeddownloads/payeddownloads.php";
    $destination = JPATH_ROOT."/components/com_virtuemart/controllers/";        
    echo $src."<br>";
    echo $destination."<br>";
    JFile::move($src,$destination);

?>

该文件不会从payeddownloads移动到controllers文件夹,也不会导致任何错误。

另外我需要提一下,php.ini有error_reporting = E_ALL和display_errors = On。 php_error.log还会捕获错误。如果我键入例如echo“lala”oo,它将记录错误并显示它。 所以我怀疑JFile :: move有一个错误,即使没有复制文件,它也不会抛出任何错误。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

请尝试使用以下内容。您的代码几乎没有调整:

function install($parent) {

    $src = JPATH_SITE . "/plugins/vmcustom/payeddownloads/payeddownloads.php";
    $destination = JPATH_SITE . "/components/com_virtuemart/controllers";

    if(JFile::exists($src)){
       echo "File Exists!";
    }
    else{
       echo "File Doesn't Exist!";
    }
    if(JFolder::exists($destination)){
       echo "Destination Folder Exists!";
    }
    else{
       echo "Destination Folder Doesn't Exist!";
    }

    JFile::move($src, $destination); // Move file

    if(JFile::move($src, $destination)){
       echo "File Successfully Moved!";
    }
    else{
       echo "failed to move from ".$src." to ".$destination;
    }

}

答案 1 :(得分:0)

即使认为线程已经老了,我发现它有同样的问题,也许解决方案可以适用于任何其他人。

JFile :: move需要源和目标FILE路径。在上面的代码中,路径应如下所示。

$src = JPATH_SITE . "/plugins/vmcustom/payeddownloads/payeddownloads.php";
$destination = JPATH_SITE . "/components/com_virtuemart/controllers/payeddownloads.php";