我正在开发一个 Joomla 组件,它应该提供上传文件的功能。我遵循了docs.joomla.org 的指南,并导出了以下函数:
public function fileupload()
{
$jinput = JFactory::getApplication()->input;
$files = $jinput->files->get('jform','array',null);
$fileError=$files['image']['error'];
If ($fileError>0){
switch (true){
case $fileError==1:
echo JText::_( 'FILE TO LARGE THAN PHP INI ALLOWS' );
return;
case $fileError==2:
echo JText::_( 'FILE TO LARGE THAN HTML FORM ALLOWS' );
return;
case $fileError==3:
echo JText::_( 'ERROR PARTIAL UPLOAD' );
return;
case $fileError==4:
echo JText::_( 'ERROR NO FILE' );
return;
}
}
$filesize=$files['image']['size'];
If ($filesize>2000000){
echo JText::_( 'FILE BIGGER THAN 2MB' );
}
$fileTemp=$files['image']['tmp_name'];
$imageinfo = getimagesize($fileTemp);
$okMIMETypes = 'image/jpeg,image/jpg,image/pjpeg,image/png,image/x-png,image/gif';
$validFileTypes = explode(",", $okMIMETypes);
if( !is_int($imageinfo[0]) || !is_int($imageinfo[1]) || !in_array($imageinfo['mime'], $validFileTypes) )
{
echo JText::_( 'INVALID FILETYPE' );
return;
}
$fileName = preg_replace("/[^A-Za-z0-9]/i", "-", $fileName);
$uploadPath = JPATH_Component.DS.$fileName;
if(!JFile::upload($fileTemp, $uploadPath))
{
echo JText::_('ERROR MOVING FILEs'.$fileTemp);
return;
}
else
{
// success, exit with code 0 for Mac users, otherwise they receive an IO Error
exit(0);
}
If (isset($files)){
$name = $files['image']['name'];
$size = $files['image']['size'];
}
$this->setRedirect(JRoute::_('index.php?
option=com_name&view=confirmation&filename='.$name.'&filesize='.
$size.'&tmp='.$fileTemp.'&dir=', false));
}
关键是,“ JFile::upload($fileTemp, $uploadPath)
”总是会导致错误
Can't move File
tmp文件夹的路径是正确的(*/shared-data/webroot/01_Playground/tmp*),依赖于stackoverflow的另一篇文章,我将文件权限设置为644,将目录权限设置为755(我也试过了777),到目前为止没有成功。 $files['image']['tmp_name']
正在返回一个值,但我的 tmp 文件夹中没有任何内容。(我在 linux-ubuntu 和 windows 上尝试了这个代码片段,但没有成功。)也许有人知道我的问题的有效解决方案?
更新:在激活错误报告并使用 var_dump 后,我发现了以下内容:它与 exit(0) 有关系;我删除了包含 exit(0) 的行,它可以正常工作。