Я разрабатываю компонент Joomla, который должен обеспечивать функциональность для загрузки файлов. Я следовал за guidelines от docs.joomla.org, и вывел следующую функцию:Joomla JFile :: upload Issue
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
Путь к ТМП -папка правильная (*/shared-data/webroot/01_Playground/tmp *), в зависимости от другой записи в stackoverflow, я установил права доступа к файлу 644, а разрешение на директорию 755 (я также пробовал 777), без успеха так далеко. $files['image']['tmp_name']
возвращает значение, но в моей tmp-папке ничего нет. (Я пробовал этот фрагмент кода на linux-ubuntu, а также на windows, без успеха.) Возможно, кто-то знает рабочее решение для моей проблемы?
Обновление: после активации сообщения об ошибках и использования var_dump я выяснил следующее: оно имеет какое-то отношение к exit (0); Я удалил строку, содержащую exit (0), и она работает так, как должна быть.
вы пытались использовать 'var_dump(); 'с некоторыми из переменных, чтобы они функциональны? – Lodder
2 Вопросы: Как выглядит ваша форма? А где метод 'fileupload()'? – Craig
Я не знаю, если вы следовали за последним выпуском безопасности, но вам нужно сделать более обширную проверку файла. Есть ли веская причина не просто использовать JFormFiledMedia или использовать JMediaHelper? – Elin