<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl"  href="/xslt/final.xslt"?><html>
  <head>
    <title>Загрузка файлов на сервер в Codeigniter</title>
    <meta name="css" content=""/>
    <meta name="js" content=""/>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta name="id" content="15"/>
    <link rel="alternate" type="application/rss+xml" title="RSS" href="/rss.xml"/>
  </head>
  <body>
    <div class="main">
      <div class="wrap">
        <div class="L">
          <h1><a href="/">..</a> / Загрузка файлов на сервер в Codeigniter</h1>
          <ol class="tags big"/>
          <div class="myContent"><p>Для загрузки файлов на сервер в Codeigniter  есть отдельная библиотека  File Uploading Class  <a href="#" title="codeigniter.com/user_guide/libraries/file_uploading.html" rel="nofollow" class="external">Этот раздел мануала</a> очень хорошо документирован. Поэтому остается только передрать код из  мануала.</p>
<p>Здесь и далее для примера берем заготовку блока из <a href="#" title="erum.ru/aticles/12" rel="nofollow" class="external">Прелюдии</a></p>
<h2>1.  Controller</h2>
<p>/system/application/controllers/upload.php<br/>
<br/>

<table class="code">
    <tbody>
        <tr>
            <td><!--php-->
            <pre class="brush: plain">&lt;?php
            
            class Upload extends Controller {
            
                function Upload()
                {
                    parent::Controller();
                    $this-&gt;    load-&gt;    helper(array('form', 'url'));
                }
            
                function index()
                {
                    $this-&gt;    load-&gt;    view('upload_form', array('error' =&gt;     ' ' ));
                }
            
                function do_upload()
                {
                    $config['upload_path'] = './up/';  // задаем путь к директории upload
                    $config['allowed_types'] = 'gif
jpg
txt
html'; // указываем допустимые расширения
                    $config['max_size']    = '100';  // max размер файла в Kb
                    $config['max_width']  = '1024';  // max размер  по вертикали
                    $config['max_height']  = '768'; // max размер  по горизонтали
            
                    $this-&gt;    load-&gt;    library('upload', $config);
            
                    if ( ! $this-&gt;    upload-&gt;    do_upload())
                    {   // сообщение об ошибке загрузки
                        $error = array('error' =&gt;     $this-&gt;    upload-&gt;    display_errors());
                        $this-&gt;    load-&gt;    view('upload_form', $error);
                    }
                    else
                    {  // вывод параметров  переданного файла
                        $data = array('upload_data' =&gt;     $this-&gt;    upload-&gt;    data());
                        $this-&gt;    load-&gt;    view('upload_success', $data);
                    }
                }
            }
            ?&gt;    </pre><!--/php--></td>
        </tr>
    </tbody>
</table>
</p>
<h2>2. View</h2>
<p><br/>
Вьюеров два.  Один вьюер для  формы system/application/controllers/upload_form.php, через которую отправляют данные: <br/>
<br/>

<table class="code">
    <tbody>
        <tr>
            <td><!--php-->
            <pre class="brush: plain">&lt;html&gt; 
            &lt;body&gt;    
            &lt;?=$error;?&gt;    
            &lt;?=form_open_multipart('upload/do_upload'); ?&gt;    
            &lt;input type="file" name="userfile" size="20" /&gt;    
            &lt;br /&gt;    &lt;br /&gt;    
            &lt;input type="submit" value="upload" /&gt;    
            &lt;/form&gt;    
            &lt;/body&gt;    
            &lt;/html&gt;    </pre><!--/php--></td>
        </tr>
    </tbody>
</table>
<br/>
Второй вьюер для  получения информации о загруженном файле S:\system\application\controllers\upload_success.php, через которую отправляют данные: <br/>
<br/>

<table class="code">
    <tbody>
        <tr>
            <td><!--php-->
            <pre class="brush: plain">&lt;html&gt; 
            &lt;body&gt;    
            &lt;h3&gt;    Your file was successfully uploaded!&lt;/h3&gt;    
            &lt;ul&gt;    
            &lt;?php foreach($upload_data as $item =&gt;     $value):?&gt;    
            &lt;li&gt;    &lt;?=$item;?&gt;    : &lt;?=$value;?&gt;    &lt;/li&gt;    
            &lt;?php endforeach; ?&gt;    
            &lt;/ul&gt;    
            &lt;p&gt;    &lt;?=anchor('upload', 'Upload Another File!'); ?&gt;    &lt;/p&gt;    
            &lt;/body&gt;    
            &lt;/html&gt;    </pre><!--/php--></td>
        </tr>
    </tbody>
</table>
</p>
<h2>3.  Директория для загрузки.</h2>
<p>Создаем директорию с именем <strong>up</strong> для загрузки файлов в корневой директории. Для простоты директория задается в контроллере через относительный путь. <br/>
$config['upload_path'] = './up/';  <br/>
При переносе на Unix-хостинг не забываем открыть директорию на чтение и запись. Впрочем, если забудем - не беда  - CodeIgniter напомнит сообщением .<br/>
"The upload destination folder does not appear to be writable.";<br/>
<br/>
Теперь можно запустить скрипт загрузки http://ci/upload/  и проверить работу скрипта</p>
<h2>4. Руссификация</h2>
<p><a href="#" title="erum.ru/article/14" rel="nofollow" class="external">Русификация сообщения об ошибках</a> выполняется так же как и для  валидатора в предыдущем примере. Языковой файл upload_lang.php, отвечающий за upload  лежит в соответствующей директории.</p>
<h2>5. The End</h2>
<p>Все что создано на этом шаге складываем в <a href="../../../../doc/ci2.zip">архивную папку step3</a>.</p></div>
          <ol class="tags big">
            <li class="date">2007-09-03</li>
          </ol>
          <ol class="see">
            <li>
              <a href="#"><span>codeigniter.com/user_guide/helpers/download_helper.html</span> - <b>Download Helper (CodeIgniter User Guide)</b></a>
            </li>
          </ol>
          <ul class="comment">
            <li id="a400" title="a0">
              <a name="69" title="" rel="12.12.09"/>
              <div>Не могли бы Вы рассказать о множественной загрузке файлов.</div>
            </li>
            <li id="a401" title="a400">
              <a name="&#x418;&#x441;&#x430;&#x430;&#x43A; &#x422;&#x44B;&#x43D;&#x433;&#x44B;&#x43B;&#x447;&#x430;&#x432;" title="erum.ru" rel="12.12.09"/>
              <div>К сожалению, это возможно только при помощи флеша. Я стараюсь избегать этого. Но вы можете погуглить и обязательно найдете плагины основанные на этих технологиях. Они года три ходят по Сети.</div>
            </li>
            <li id="a462" title="a0">
              <a name="ilya" title="" rel="22.02.10"/>
              <div>было бы интересно узнать на примерах как происходит загрузка и распаковка архивов ;)</div>
            </li>
            <li id="a463" title="a462">
              <a name="&#x418;&#x441;&#x430;&#x430;&#x43A; &#x422;&#x44B;&#x43D;&#x433;&#x44B;&#x43B;&#x447;&#x430;&#x432;" title="erum" rel="23.02.10"/>
              <div>Проблема может быть тольо в одном - поддержке этой функции у вашего провайдера. В остальном все совершенно замечательно документированов в php-мануале.<br/>см например <a title="http://phpclub.ru/manrus/f/ref.zip.html" rel="nofollow" class="external" href="#">ссылка</a></div>
            </li>
            <li id="a525" title="a0">
              <a name="saymon7" title="www.yangl.ru/" rel="03.06.10"/>
              <div>спасибо за сылку!!!любопытно было узнать !!</div>
            </li>
            <li id="a558" title="a0">
              <a name="&#x421;&#x435;&#x440;&#x433;&#x435;&#x439;" title="" rel="18.09.10"/>
              <div>Здраствуйте<br/>У меня такой вопрос. При загрузке файлов не работает <br/>$config['encrypt_name'] = true;<br/>т.е не переименовывает залитый файл в случайную строку, и еще, не позволяет заливать файлы с указанным разширением, в частности это .php .sis и т.д., что это может быть?<br/>Спасибо</div>
            </li>
            <li id="a606" title="a401">
              <a name="Mac" title="" rel="05.04.11"/>
              <div>А если у формы имеется два поля file? Разве нельзя это заставить работать без флэша?</div>
            </li>
            <li id="a614" title="a0">
              <a name="&#x41C;&#x430;&#x43A;&#x441;&#x438;&#x43C;" title="" rel="16.08.11"/>
              <div>Множественная загрузка файлов работает отлично с помощью данного класса, там контроллер подправить в пару местах.<br/>Убейте это условие:<br/>if ( ! $this-&gt;upload-&gt;do_upload()) ... и т.д. , вместе с ELSE. ИМХО это чушь.<br/>Вместо него поставьте это:<br/>$this-&gt;load-&gt;library('upload',$config);	$this-&gt;upload-&gt;do_upload('NAME ПОЛЯ FILE на виде');	$this-&gt;upload-&gt;do_upload('NAME ПОЛЯ FILE на виде № 2 ');<br/>и т.д. до бесконечности.</div>
            </li>
            <li id="a615" title="a606">
              <a name="&#x418;&#x441;&#x430;&#x430;&#x43A; &#x422;&#x44B;&#x43D;&#x433;&#x44B;&#x43B;&#x447;&#x430;&#x432;" title="erum.ru" rel="16.08.11"/>
              <div>Беру свои слова взад. <br/>В декабре 2009 я был  сильно заморочен какой-то фигней для множественной Ajax-загрузки файлов. И в вопрос не врубился.</div>
            </li>
            <li id="a616" title="a614">
              <a name="&#x418;&#x441;&#x430;&#x430;&#x43A; &#x422;&#x44B;&#x43D;&#x433;&#x44B;&#x43B;&#x447;&#x430;&#x432;" title="erum.ru" rel="16.08.11"/>
              <div>Максим, это очень старый блог. Я удивлен, что он кому-то еще нужен. <br/>Имхо не надо ничего править. Если кто-то вдруг решил осваивать фреймворк - лучший совет - перейти на YII. <br/>Ну как-то в середине 2011 привязыватся к CI   - некошерно.</div>
            </li>
          </ul>
        </div>
      </div>
      <div class="R">
        <a href="/" title="&#x41D;&#x430; &#x433;&#x43B;&#x430;&#x432;&#x43D;&#x443;&#x44E;"/>
      </div>
    </div>
    <div id="li"/>
  </body>
</html>

