Форум русской поддержки Joomla!® CMS
09.12.2016, 07:54:13 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Ошибка при загрузке файла на форму в файле file_upload.php

 (Прочитано 1426 раз)
0 Пользователей и 1 Гость смотрят эту тему.
vesnushka_mur
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 8


« : 19.02.2015, 10:48:23 »

Всем доброго времени суток! Smiley

С Joomla 3 работаю неделю Shocked, администрирую сайт. Так как сталкиваюсь со всем первый раз не все получается решить самой Roll Eyes. Делаю форму с загрузкой файла. В setup прописываю Setup ->
File Upload -> Edit Enabled - Yes
Files config - file:docx-doc-xlsx-xls
   Setup -> Email -> Edit В самом низу заполняю поле Attachment files (например file) Smiley

При нажатии кнопки отправить выдает две ошибки в файле file_upload.php: Cry

Warning: explode() [function.explode]: Empty delimiter in /var/www/vhosts/u2749014.plsk.regruhosting.ru/site21/administrator/components/com_chronoforms5/chronoforms/actions/file_upload/file_upload.php on line 79

Warning: Invalid argument supplied for foreach() in /var/www/vhosts/u2749014.plsk.regruhosting.ru/site21/administrator/components/com_chronoforms5/chronoforms/actions/file_upload/file_upload.php on line 81

Данные с формы приходят на заданную почту, но поле файла пустое. Перерыла весь интернет, не могу найти ничего конкретного по этим ошибкам. Как исправить? Подскажите пожалуйста. Руководитель требует решения,  я даже не знаю, за что зацепиться. ! ! ! Sad Sad Sad
Записан
motokraft
Живу я здесь
******

Репутация: +72/-13
Offline Offline

Сообщений: 1436


« Ответ #1 : 19.02.2015, 10:55:35 »

Можно посмотреть код в котором выдает ошибки....
Записан
vesnushka_mur
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 8


« Ответ #2 : 19.02.2015, 10:59:11 »

<?php
/**
* ChronoCMS version 1.0
* Copyright (c) 2012 ChronoCMS.com, All rights reserved.
* Author: (ChronoCMS.com Team)
* license: Please read LICENSE.txt
* Visit http://www.ChronoCMS.com for regular updates and information.
**/
namespace GCore\Admin\Extensions\Chronoforms\Actions\FileUpload;
/* @copyright:ChronoEngine.com @license:GPLv2 */defined('_JEXEC') or die('Restricted access');
defined("GCORE_SITE") or die;
Class FileUpload extends \GCore\Admin\Extensions\Chronoforms\Action{
   static $title = 'Files Upload';
   static $setup = array('simple' => array('title' => 'Uploads'));
   var $events = array('success' => 0, 'fail' => 0);

   var $defaults = array(
      'files' => '',
      'array_fields' => '',
      'upload_path' => '',
      'forced_file_name' => '',
      'max_size' => '100',
      'min_size' => '0',
      'enabled' => 1,
      'safe_file_name' => 1,
      'max_error' => 'Sorry, Your uploaded file size exceeds the allowed limit.',
      'min_error' => 'Sorry, Your uploaded file size is less than the minimum limit.',
      'type_error' => 'Sorry, Your uploaded file type is not allowed.',
      'extensions_separator' => '-',
   );

   function execute(&$form, $action_id){
      $config =  $form->actions_config[$action_id];
      $this->config = $config = new \GCore\Libs\Parameter($config);
      if((bool)$config->get('enabled', 0) === false){
         return;
      }
      $upload_path = $config->get('upload_path', '');
      if(!empty($upload_path)){
         $upload_path = str_replace(array("/", "\\"), DS, $upload_path);
         if(substr($upload_path, -1) == DS){
            $upload_path = substr_replace($upload_path, '', -1);
         }
         $upload_path = $upload_path.DS;
         $config->set('upload_path', $upload_path);
      }else{
         $upload_path = \GCore\C::ext_path('chronoforms', 'front').'uploads'.DS.$form->form['Form']['title'].DS;
      }
      $this->upload_path = $upload_path;
      //check path is correct
      if(!is_dir($this->upload_path) OR !is_writable(realpath($this->upload_path))){
         //$form->errors[] = "Unable to write to upload directory.";
         //$this->events['fail'] = 1;
         //return;
      }
      if(!file_exists($this->upload_path.DS.'index.html')){
         if(!\GCore\Libs\Folder::create($this->upload_path)){
            $form->errors[] = "Couldn't create upload directory: ".$this->upload_path;
            $this->events['fail'] = 1;
            return;
         }
         $dummy_c = '<html><body bgcolor="#ffffff"></body></html>';
         if(!\GCore\Libs\File::write($this->upload_path.DS.'index.html', $dummy_c)){
            $form->errors[] = "Couldn't create upload directory index file.";
            $this->events['fail'] = 1;
            return;
         }
      }
      $files_array = explode("\n", trim($config->get('files', '')));
      //get array fields
      $array_fields = array();
      if(trim($config->get('array_fields', ''))){
         $array_fields = explode(',', trim($config->get('array_fields', '')));
      }

      foreach($files_array as $file_string){
         if(strpos($file_string, ':')!== false){
            $file_data = explode(':', trim($file_string));
            $file_extensions = explode($config->get('extensions_separator', '-'), $file_data[1]);//ошибка!
            //convert all extensions to lower case
            foreach($file_extensions as $k => $file_extension){
               $file_extensions[$k] = strtolower($file_extension);
            }//ошибка!

            //get the posted file details
            $field_name = $file_data[0];
            if(empty($_FILES[$field_name])){
               continue;
            }
            $file_post = $_FILES[$field_name];
            if(in_array($field_name, $array_fields) AND !empty($file_post['name']) AND ($file_post['name'] === array_values($file_post['name']))){
               foreach($file_post['name'] as $k => $v){
                  $uploaded_file_data = $this->processUpload($form, array('name' => $file_post['name'][$k], 'tmp_name' => $file_post['tmp_name'][$k], 'error' => $file_post['error'][$k], 'size' => $file_post['size'][$k]), $file_data[0], $file_extensions);
                  if(is_array($uploaded_file_data)){
                     $form->files[$field_name][] = $uploaded_file_data;
                     $form->data[$field_name][] = $uploaded_file_data['name'];
                  }elseif($uploaded_file_data === false){
                     return false;
                  }
               }
            }else{
               $uploaded_file_data = $this->processUpload($form, $file_post, $field_name, $file_extensions);
               if(is_array($uploaded_file_data)){
                  $form->files[$field_name] = $uploaded_file_data;
                  $form->data[$field_name] = $uploaded_file_data['name'];
               }elseif($uploaded_file_data === false){
                  return false;
               }
            }
         }
      }
   }

   function processUpload(&$form, $file_post = array(), $field_name, $file_extensions){
      //check valid file
      if(!\GCore\Libs\Upload::valid($file_post)){
         return false;
      }
      //check not empty file upload
      if(!\GCore\Libs\Upload::not_empty($file_post)){
         return false;
      }
      //check errors
      if(!isset($file_post['tmp_name']) OR !is_uploaded_file($file_post['tmp_name'])){
         if(!empty($file_post['error']) AND $file_post['error'] !== UPLOAD_ERR_OK){
            $form->debug[$action_id][self::$title][] = 'PHP returned this error for file upload by : '.$field_name.', PHP error is: '.$file_post['error'];
            $form->errors[$field_name] = $file_post['error'];
         }
         $this->events['fail'] = 1;
         return false;
      }else{
         $form->debug[$action_id][self::$title][] = 'Upload routine started for file upload by : '.$field_name;
      }
      if((bool)$this->config->get('safe_file_name', 1) === true){
         $file_name = \GCore\Libs\File::makeSafe($file_post['name']);
      }else{
         $file_name = utf8_decode($file_post['name']);
      }
      $real_file_name = $file_name;
      $file_tmp_name = $file_post['tmp_name'];
      $file_info = pathinfo($file_name);
      //mask the file name
      if(strlen($this->config->get('forced_file_name', '')) > 0){
         $file_name = str_replace('FILE_NAME', $file_name, $this->config->get('forced_file_name', ''));
      }else{
         $file_name = date('YmdHis').'_'.$file_name;
      }
      //check the file size
      if($file_tmp_name){
         //check max size
         if($file_post['error'] === UPLOAD_ERR_INI_SIZE){
            $form->debug[$action_id][self::$title][] = 'File : '.$field_name.' size is over the max PHP configured limit.';
            $form->errors[$field_name] = $this->config->get('max_error', 'Sorry, Your uploaded file size ('.($file_post["size"] / 1024).' KB) exceeds the allowed limit.');
            $this->events['fail'] = 1;
            return false;
         }elseif(($file_post["size"] / 1024) > (int)$this->config->get('max_size', 100)){
            $form->debug[$action_id][self::$title][] = 'File : '.$field_name.' size is over the max limit.';
            $form->errors[$field_name] = $this->config->get('max_error', 'Sorry, Your uploaded file size ('.($file_post["size"] / 1024).' KB) exceeds the allowed limit.');
            $this->events['fail'] = 1;
            return false;
         }elseif(($file_post["size"] / 1024) < (int)$this->config->get('min_size', 0)){
            $form->debug[$action_id][self::$title][] = 'File : '.$field_name.' size is less than the minimum limit.';
            $form->errors[$field_name] = $this->config->get('min_error', 'Sorry, Your uploaded file size ('.($file_post["size"] / 1024).' KB) is less than the minimum limit.');
            $this->events['fail'] = 1;
            return false;
         }elseif(!in_array(strtolower($file_info['extension']), $file_extensions)){
            $form->debug[$action_id][self::$title][] = 'File : '.$field_name.' extension is not allowed.';
            $form->errors[$field_name] = $this->config->get('type_error', 'Sorry, Your uploaded file type is not allowed.');
            $this->events['fail'] = 1;
            return false;
         }else{
            $uploaded_file = \GCore\Libs\Upload::save($file_tmp_name, $this->upload_path.$file_name);
            if($uploaded_file){
               $uploaded_file_data = array();
               $uploaded_file_data = array('name' => $file_name, 'original_name' => $real_file_name, 'path' => $this->upload_path.$file_name, 'size' => $file_post["size"]);
               //Try to generate an auto file link
               $site_link = \GCore\C::get('GCORE_FRONT_URL');
               if(substr($site_link, -1) == "/"){
                  $site_link = substr_replace($site_link, '', -1);
               }
               $uploaded_file_data['link'] = str_replace(array(\GCore\C::get('GCORE_FRONT_PATH'), DS), array($site_link, "/"), $this->upload_path.$file_name);
               //$form->data[$field_name] = $file_name;
               $form->debug[$action_id][self::$title][] = $this->upload_path.$file_name.' has been uploaded successfully.';
               $this->events['success'] = 1;
               return $uploaded_file_data;
            }else{
               $form->debug[$action_id][self::$title][] = $this->upload_path.$file_name.' could not be uploaded!!';
               $this->events['fail'] = 1;
               return false;
            }
         }
      }
   }

   public static function config(){
      echo \GCore\Helpers\Html::formStart('action_config file_upload_action_config', 'file_upload_action_config_{N}');
      echo \GCore\Helpers\Html::formSecStart();
      echo \GCore\Helpers\Html::formLine('Form[extras][actions_config][{N}][enabled]', array('type' => 'dropdown', 'label' => l_('CF_ENABLED'), 'options' => array(0 => l_('NO'), 1 => l_('YES'))));
      echo \GCore\Helpers\Html::formLine('Form[extras][actions_config][{N}][files]', array('type' => 'textarea', 'label' => l_('CF_FILES_CONFIG'), 'rows' => 5, 'cols' => 60, 'sublabel' => l_('CF_FILES_CONFIG_DESC')));
      echo \GCore\Helpers\Html::formLine('Form[extras][actions_config][{N}][upload_path]', array('type' => 'text', 'label' => l_('CF_UPLOAD_PATH'), 'class' => 'XL', 'sublabel' => l_('CF_UPLOAD_PATH_DESC')));
      echo \GCore\Helpers\Html::formLine('Form[extras][actions_config][{N}][max_size]', array('type' => 'text', 'label' => l_('CF_MAX_FILE_SIZE'), 'sublabel' => l_('CF_MAX_FILE_SIZE_DESC')));
      echo \GCore\Helpers\Html::formLine('Form[extras][actions_config][{N}][min_size]', array('type' => 'text', 'label' => l_('CF_MIN_FILE_SIZE'), 'sublabel' => l_('CF_MIN_FILE_SIZE_DESC')));
      echo \GCore\Helpers\Html::formLine('Form[extras][actions_config][{N}][max_error]', array('type' => 'text', 'label' => l_('CF_MAX_SIZE_ERROR'), 'class' => 'XL', 'sublabel' => l_('CF_MAX_SIZE_ERROR_DESC')));
      echo \GCore\Helpers\Html::formLine('Form[extras][actions_config][{N}][min_error]', array('type' => 'text', 'label' => l_('CF_MIN_SIZE_ERROR'), 'class' => 'XL', 'sublabel' => l_('CF_MIN_SIZE_ERROR_DESC')));
      echo \GCore\Helpers\Html::formLine('Form[extras][actions_config][{N}][type_error]', array('type' => 'text', 'label' => l_('CF_FILE_TYPE_ERROR'), 'class' => 'XL', 'sublabel' => l_('CF_FILE_TYPE_ERROR_DESC')));
      echo \GCore\Helpers\Html::formLine('Form[extras][actions_config][{N}][extensions_separator]', array('type' => 'text', 'label' => l_('CF_FILE_UPLOAD_EXT_SEPARATOR'), 'class' => 'S', 'sublabel' => l_('CF_FILE_UPLOAD_EXT_SEPARATOR_DESC')));
      echo \GCore\Helpers\Html::formSecEnd();
      echo \GCore\Helpers\Html::formEnd();
   }
« Последнее редактирование: 19.02.2015, 11:02:48 от vesnushka_mur » Записан
vesnushka_mur
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 8


« Ответ #3 : 19.02.2015, 11:00:57 »

Скопировала весь код в файле, так как я практически не понимаю на 70%, что в нем происходит (поэтому не знаю какие блоки можно было бы скопировать выборочно и какие параметры важны) не сердитесь на начинающую девушку программиста  Angry
Записан
motokraft
Живу я здесь
******

Репутация: +72/-13
Offline Offline

Сообщений: 1436


« Ответ #4 : 19.02.2015, 11:13:16 »

Всего так много. Зачем? Ты всего лишь загружаешь файл, или там есть возможность загрузки нескольких файлов...

Что выводят переменные в коде в котором выдает ошибка...


Посмотри ти правильно ты сделала если смотреть на примере php.net/manual/ru/function.explode.php
Записан
motokraft
Живу я здесь
******

Репутация: +72/-13
Offline Offline

Сообщений: 1436


« Ответ #5 : 19.02.2015, 11:14:19 »

Скопировала весь код в файле, так как я практически не понимаю на 70%, что в нем происходит (поэтому не знаю какие блоки можно было бы скопировать выборочно и какие параметры важны) не сердитесь на начинающую девушку программиста  Angry

Афигеть!  Ну так поищи готовые формы загрузки файлов...
Записан
b2z
Support Team
*****

Репутация: +710/-0
Offline Offline

Пол: Мужской
Сообщений: 7538


Разраблю понемногу


« Ответ #6 : 19.02.2015, 11:48:07 »

Скопировала весь код в файле, так как я практически не понимаю на 70%, что в нем происходит (поэтому не знаю какие блоки можно было бы скопировать выборочно и какие параметры важны) не сердитесь на начинающую девушку программиста  Angry
Это пять! ... Зачем лезть, если не знаешь как сделать?
Записан
vesnushka_mur
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 8


« Ответ #7 : 19.02.2015, 11:58:22 »

Я и работала всего лишь с конструктором форм, на форумах читала, у всех все загружает, если правильно параметры выставить, никто в файлы с кодом и не лез, а у меня выдал ошибку в файле. Пришлось зайти посмотреть. Я понимаю, как работать с интерфейсом, но системный код загрузки я не понимаю. Зачем писать "зачем лезть", лучше пишите по существу.
Записан
vesnushka_mur
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 8


« Ответ #8 : 19.02.2015, 12:01:00 »

Я в этом файле сама и не писала ничего. Все делала в интерфейсе.
Записан
Ilhom666
Живу я здесь
******

Репутация: +157/-0
Offline Offline

Сообщений: 1340



« Ответ #9 : 19.02.2015, 12:03:39 »

кроноформс какой версии?
Записан
motokraft
Живу я здесь
******

Репутация: +72/-13
Offline Offline

Сообщений: 1436


« Ответ #10 : 19.02.2015, 12:05:22 »

Я в этом файле сама и не писала ничего. Все делала в интерфейсе.

А можешь показать где ты этот код взяла, и что он делает? Ну так найти готовый код загрузки файла...
Записан
vesnushka_mur
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 8


« Ответ #11 : 19.02.2015, 12:09:19 »

А можешь показать где ты этот код взяла, и что он делает? Ну так найти готовый код загрузки файла...

файл взяла по пути ошибки, из каталога. судя по названию файла грузит файл на сервер.
Записан
vesnushka_mur
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 8


« Ответ #12 : 19.02.2015, 12:12:30 »

кроноформс какой версии?
ChronoForms 5
Записан
motokraft
Живу я здесь
******

Репутация: +72/-13
Offline Offline

Сообщений: 1436


« Ответ #13 : 19.02.2015, 12:13:52 »

файл взяла по пути ошибки, из каталога. судя по названию файла грузит файл на сервер.

Ты меня непоняла...
Начни с самого простого, зачем сразу лезешь в сложное, тем более не знаешь что там происходит...
Записан
vesnushka_mur
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 8


« Ответ #14 : 19.02.2015, 12:23:17 »

Ты меня непоняла...
Начни с самого простого, зачем сразу лезешь в сложное, тем более не знаешь что там происходит...

хорошо, тогда по порядку. что я сделала? открыла старую форму, добавила элемент загрузки файла, определила e-mail отправки. письмо приходило со всеми данными кроме самого файла. пошарила по форумам. нашла где определять параметры загрузки файлов. разрешила загрузку файла на вкладке upload в setup и определила допустимые разрешения файлов для загрузки. после этого появляются описанные мной в содержании вопроса две ошибки. зашла в файл, обалдела от содержимого (хоть php знаю, но, видимо, не настолько хорошо). возможно, я Неправильно понимаю, потому что работаю со всем этим совсем мало, мне на работе дали все это на собственное изучение. по Joomla я самоучка. что-то быстро разобрала, а вот с чем-то проблемы
Записан
motokraft
Живу я здесь
******

Репутация: +72/-13
Offline Offline

Сообщений: 1436


« Ответ #15 : 19.02.2015, 12:46:36 »

Обычная загрузка файлов с помощью формы состоит из:
1. проверка допустимых расширений,
2. указываем путь куда будем загружать файл,
3. Устанавливаем макс. размер в байтах
4. Далее идут проверки: на размер файла, на его расширение, и на права доступа к папке в которую будем загружать...
И если все правильно то вывод сообщение об успкшной заргузке, если нкт то выводим ошибку...

Вот это простая форма заргузки файлов. А что у тебя?
Записан
Ilhom666
Живу я здесь
******

Репутация: +157/-0
Offline Offline

Сообщений: 1340



« Ответ #16 : 19.02.2015, 15:17:40 »

в кроно5 есть Demos и там форма demo-file-upload, там только на вкладке Setup раздел email надо подправить. Если эту форму на сайт вывести - она работает?
Записан
nicalf
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 58


« Ответ #17 : 10.09.2015, 08:08:55 »

подскажите, файлы загружаются и отправляются, на сервере сохраняются, но на почту не приходит, в чем проблема? Cr5
Записан
nicalf
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 58


« Ответ #18 : 13.09.2015, 18:06:15 »

подскажите, файлы загружаются и отправляются, на сервере сохраняются, но на почту не приходит, в чем проблема? Cr5

Решение:
1. Setup -> File Upload -> Edit
    Enabled - Yes
    Files config - заполнить (например file5:jpg-png-gif)
    Остальное не критично...
2. Setup -> Email -> Edit
    В самом низу заполнить поле Attachment files (например file5)

Всё отправляется!
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet