我实际设法为我制作的插件和安装脚本文件制作安装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有一个错误,即使没有复制文件,它也不会抛出任何错误。有什么建议吗?
答案 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";