Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > $_FILES - Съедает первую букву


Автор: Gold Dragon 14.12.2011, 15:54
В качестве локального сервера использую OpenServer 4.0

пересылаю файл через форму. Читаю имя файла. Если имя на латинице, то просто нет первой буквы.. Если на кириллице, то первая буква - знак вопроса в ромбике.

В чём проблема?

Автор: ayax2005 14.12.2011, 16:08
Как читаете?

Автор: $дмитрий 14.12.2011, 17:38
Что выводит print_r($_FILES);

Автор: Gold Dragon 14.12.2011, 21:35
Цитата(ayax2005 @  14.12.2011,  17:08 Найти цитируемый пост)
Как читаете? 

Да просто получаю $_FILES

Цитата($дмитрий @  14.12.2011,  18:38 Найти цитируемый пост)
Что выводит print_r($_FILES); 

Уже показывает без первой буквы

Автор: ayax2005 14.12.2011, 21:40
Gold Dragon, ну сами понимаете, что чудеса у вас происходят. Давайте исходный код уже

Автор: Gold Dragon 14.12.2011, 21:44
сам понимаю что чудеса.. вот только какой код? Показать форму и print_r ? smile

Сейчас точно не воспроизведу, тогда до завтрашнего утра (буквальный код на работе)

Автор: Gold Dragon 15.12.2011, 06:47
вот сама форма
Код

<form enctype="multipart/form-data" action="http://test.qqq/index2.php?option=com_forum&amp;task=attach&amp;id=62&amp;type=2" method="post">
    <div class="inform">
        <fieldset><legend>Выберите и загрузите файл</legend>
            <div class="infldset">
                <div> Загрузка файлов</div>
                    <input type="file" tabindex="1" name="fichier" id="fichier"><br />
                    <label for="fichier_name">Изменить имя файла (опционально)</label><br />
                    <input type="text" value="" tabindex="2" name="fichier_name" id="fichier_name">
                <div>
                    <br>Допустимые расширения zip, rar, jpg .
                    <p><strong>Ваша папка :</strong> components/com_forum/attach/62</p>
                </div>
            </div>
        </fieldset>
    </div>
    <p><input type="submit" tabindex="3" value="Отправить" name="submit"></p>
</form>

Вот начало её обработки
Код

$error = null;
$preg = '/\.[a-zA-Z0-9_]{1,}$/i';

// проверка расширения файла
$file_ext_tmp =  preg_match($preg, $_FILES['fichier']['name'], $tmp);
if (!$file_ext_tmp){
    $error[] = _Y_ERR_EXT;
}else{
    $file['ext'] = strtolower(str_replace('.', '', $tmp[0]));
}
// проверка имени файла
var_dump($_FILES['fichier']['name'][0]);
$file['name'] = $this->parseFile(preg_replace($preg, '', $_FILES['fichier']['name']));
if ($file['name'] == ''){
    $error[] = _Y_ERR_NAME;
}

PHP 5.3.8

Автор: ayax2005 15.12.2011, 08:19
Ради интереса: установите mb_internal_encoding('UTF-8') и покажите var_dump($_FILES)

Автор: Gold Dragon 15.12.2011, 08:35
в какой момент установить? Пробовал и при формировании формы и при получении..
файл demo_1309.zip
Цитата

array
  'fichier' => 
    array
      'name' => string 'emo_1309.zip' (length=12)
      'type' => string 'application/octet-stream' (length=24)
      'tmp_name' => string 'Z:\server\php\PHP-5.3.8\temp\php2D.tmp' (length=38)
      'error' => int 0
      'size' => int 66155

    
файл Текстовый документ.1    
Цитата

array
  'fichier' => 
    array
      'name' => string '?екстовый документ.1' (length=36)
      'type' => string 'application/octet-stream' (length=24)
      'tmp_name' => string 'Z:\server\php\PHP-5.3.8\temp\php2E.tmp' (length=38)
      'error' => int 0
      'size' => int 0

Автор: ayax2005 15.12.2011, 09:02
Устанавливать в начале скрипта обработчика.
Пока не понимаю, почему, но явно мультибайт-имя как-то криво читается.
Ещё для интереса - сделайте print_r вместо var_dump.

Тип файла application/octet-stream тоже смущает

Автор: Gold Dragon 15.12.2011, 12:26
Цитата(ayax2005 @  15.12.2011,  10:02 Найти цитируемый пост)
Ещё для интереса - сделайте print_r вместо var_dump.
ну не думаю что что-то поменяется smile
Но выдаёт тоже самое..

Добавлено через 2 минуты и 1 секунду
кстати, тип тоже очень смущает... в большинстве случаев именно этот : zip, rar, exe... на картинки нормальный выдаёт

Автор: Gold Dragon 15.12.2011, 12:56
проверил тот же код в Денвере.. всё работает :(

вот результат Open Server
Цитата

    Array ( [fichier] => Array ( [name] => emo_1309.zip [type] => application/octet-stream [tmp_name] => Z:\server\php\PHP-5.3.8\temp\php42.tmp [error] => 0 [size] => 66155 ) )




вот результат Денвера
Цитата


    Array ( [fichier] => Array ( [name] => demo_1309.zip [type] => application/octet-stream [tmp_name] => Z:\tmp\php49.tmp [error] => 0 [size] => 66155 ) )


Добавлено через 54 секунды

видимо вопрос уже получается не по PHP...

Автор: MoLeX 15.12.2011, 13:15
Gold Dragon, а нечего на всякие сборки заглядывать) поставил бы сам Apache или Nginx, привязал бы РНР и было бы щастье

Автор: Gold Dragon 15.12.2011, 13:23
так хочется простоты.. Да и за столько лет никогда такой беды не было...

Автор: MoLeX 15.12.2011, 13:41
Gold Dragon, версия у тебя последняя?

Автор: Gold Dragon 15.12.2011, 14:33
последняя

Автор: MoLeX 15.12.2011, 15:37
Цитата(Gold Dragon @  15.12.2011,  14:33 Найти цитируемый пост)
последняя 

ну видимо в этом дело. на сайте говорится что они переписали заново приложение. попробуй поставить старую версию

Автор: Gold Dragon 16.12.2011, 07:08
видимо вернусь временно на старый Денвер smile А то на офсайте задаю этот вопрос, а вместо того чтобы искать проблему, его просто удаляют... Прям бесит такое отношение....

А что касается ставить всё по отдельности.. не совсем удобно с точки зрения переносимости... Тут я на флешку всё поставил и на любом компе могу работать smile 

В общем хоть у OpenServer и дружественный интерфейс, да и вообще, но вот команда создателей не очень smile

Автор: MoLeX 16.12.2011, 10:48
вроде этот проект сначала делался с помощью http://develstudio.ru/, так что лучше ему не доверять

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)