Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перемещение файлов на русском языке, Перемещение файлов на русском языке 
:(
    Опции темы
Niko8D
Дата 10.6.2016, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 23.11.2009

Репутация: нет
Всего: нет



Добрый вечер!

Все время пытался избежать этой темы, но вот настал момент когда надо решить эту задачу и вот маюсь какой уже день и ничего не получается. Вдаваться в подробности не буду. Задача состоит в том, что надо переместить (или скопировать) файлы из одного каталога в другие каталоги (так сказать расфасовать). И Вы конечно скажите, что это плёвое дело и я с вами соглашусь, но проблема в том что файлы на русском языке и функции такие как file_exists, move_uploaded_file, rename эти файлы не видят, но вот в принципе все. Если кто морочился и решил эту задачу, пожалуйста подскажите как. Сколько раз я ее пытался решить так не  получилось расколоть этот орешек.

З.Ы. В случаи с английским наименованием файлов все работает (файлов порядка 2500 шт.)

PM MAIL   Вверх
ksnk
Дата 11.6.2016, 02:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 14
Всего: 386



opendir/readdir или glob имена русских файлов в какой кодировке выдает? 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
_zorn_
Дата 12.6.2016, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 21.8.2007

Репутация: нет
Всего: 12



В вопросиках скорей всего. Но вопрос правильный и надо собственно добиться чтобы СИСТЕМА эти имена нормально видела. это собственно решение проблемы.
Но вообще нужно больше информации.
1. Откуда эти файлы взялись
2. Что за файловая система на разделе
3. Видно ли ГДЕ НИБУДЬ нормальные имена файлов ?
4. Что за система вообще (см. ЗЫ)

Быть может что имена утеряны давно из за всяких конвертаций.

ЗЫ. Не учел что пхп может быть на домашнем компе ( тобиш винде smile ) Тогда в другую сторону копать надо...

Это сообщение отредактировал(а) _zorn_ - 12.6.2016, 10:45
PM MAIL   Вверх
Niko8D
Дата 12.6.2016, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 23.11.2009

Репутация: нет
Всего: нет



Цитата(_zorn_ @ 12.6.2016,  10:43)
1. Откуда эти файлы взялись
2. Что за файловая система на разделе
3. Видно ли ГДЕ НИБУДЬ нормальные имена файлов ?
4. Что за система вообще (см. ЗЫ)

Ответ:
1. Есть программа на access, в ней есть вложения, вот про них и идет речь (к самой программе у меня доступа, описать её не могу, просто есть папка с файлами).
2. NTFS (тут не все так просто, возможно потребуется, что-бы скрипт отработался на linux (ubuntu)).
3. При выполнении команды scandir и далее при print_r файлы нормально отображаются на экране.
4. Windows 7 (OpenServer), но как ранее я писал возможно придется выполнить скрипт по linux, для начало хоть бы под windows это все исполнить.


Это сообщение отредактировал(а) Niko8D - 12.6.2016, 20:50
PM MAIL   Вверх
ksnk
Дата 12.6.2016, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 14
Всего: 386



iconv в руки.
Системная кодировка windows - cp1251, чтобы вывести имена файлов на страничку -результат glob нужно  проиконвить, в utf-8, вероятно.
Ну и обратно тоже.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
_zorn_
Дата 23.6.2016, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 21.8.2007

Репутация: нет
Всего: 12



2. Что значит не все так просто ? Конкретный вопрос - где будут файлы в конечном итоге ?
4. "Тестировать" на виндовс (да еще на NTFS) то что "возможно" планируется перенести на линукс - это верх извращизма тестирования.

ЗЫ. Бубен в руки
ЗЫЫ. ОпенСервер еще... ну удачи разобраться со всем его великолепием.
ЗЫЫЫ. Виндовс не предназначена для подобных задач (ПХП)

Это сообщение отредактировал(а) _zorn_ - 23.6.2016, 22:19
PM MAIL   Вверх
Niko8D
Дата 27.6.2016, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 23.11.2009

Репутация: нет
Всего: нет



Доброе утро!

Не буду вдавятся в подробности как я решил свою проблему, но из-за уважения к форуму и к форумчанам  я в кратко расскажу. В общем я не стал морочится и решил загрузку через форму, вот код:

Код

$mysqli = new mysqli("localhost", "root", "********", "*******");

if(!empty($_FILES))
{    
    function donwload($params)
    {
        $mysqli = new mysqli("localhost",  "********", "*******");
        
        $path = 'download_file/contractor/2016/21/' . uniqid('file_');

        if(move_uploaded_file($_FILES["filename"]["tmp_name"][$params['key']], $path))
        {
            $fileParams = array(
                'type'      => $_FILES["filename"]["type"][$params['key']],
                'name'      => $_FILES["filename"]["name"][$params['key']],
                'path'      => $path,
                'idBase'    => 2,
                'id_record' => $params['id'],
                'date_load' => date('Y-m-d H:i'),
                'removed'   => 0, 
            );
            
            $result[2] = $mysqli->query("SELECT * FROM  `attach` WHERE `id_record` = '" . $params['id'] . "' AND `name` = '" . $params['name'] . "'");  
           
            if($result[2]->num_rows == 0)
            {
                $result[0] = $mysqli->query("INSERT INTO `attach`(`type`,`name`,`path`,`idBase`,`id_record`,`date_load`,`removed`) VALUES ('" . $fileParams['type'] . "','" . $fileParams['name'] . "','" . $fileParams['path'] . "','" . $fileParams['idBase'] . "','" . $fileParams['id_record'] . "','" . $fileParams['date_load'] . "','" . $fileParams['removed'] . "')");
                
                if($result[0])
                {
                    $_SESSION['result'][] = array($fileParams['id_record'],$fileParams['name'],'<span style="color:#008000; font-weight: bold;">Файл успешно загружен в базу</span>');
                    
                    $mysqli->query("UPDATE `contractor` SET `attach` = '1' WHERE `id` = '".$fileParams['id_record']."'");
                }
            }
            else 
            {
                $_SESSION['result'][] = array($fileParams['id_record'],$fileParams['name'],'<span style="color:#CC6600; font-weight: bold;">Такой файл уже существует в базе</span>');
            }
        }
        else
        {
            $_SESSION['result'][] = array($params['key'],$_FILES["filename"]["name"][$params['key']],'<span style="color:#b70000; font-weight: bold;">Файл не загружен в базу</span>');
        }
        
        $mysqli->close();
    }    
    
    $result[1] = $mysqli->query("SELECT * FROM  `TABLE 10`"); 

    while ($row = $result[1]->fetch_assoc()) {

        if(strripos($row['COL 2'], ';'))
        {
            $array = explode(";", $row['COL 2']);
            
            foreach($_FILES['filename']['name'] as $key => $valfrom)
            {
                if(is_uploaded_file($_FILES["filename"]["tmp_name"][$key]))
                {
                    foreach($array as $valbase)
                    {                
                        if($valbase == $valfrom)
                        {
                            donwload(array('id' => $row['COL 1'], 'name' => $valbase, 'key' => $key));
                        }
                    }
                }              
            }
        }    
        else
        {  
            foreach($_FILES['filename']['name'] as $key => $value)
            {                
                if(is_uploaded_file($_FILES["filename"]["tmp_name"][$key]))
                {                     
                    if($row['COL 2'] == $_FILES['filename']['name'][$key])
                    {                        
                        donwload(array('id' => $row['COL 1'], 'name' => $row['COL 2'], 'key' => $key));
                    }                   
                }
            } 
        }        
    }
    
    echo '<pre>';
    print_r($_SESSION['result']);
    echo '</pre>'; 
}

PM MAIL   Вверх
ksnk
Дата 27.6.2016, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 14
Всего: 386



imho, тема с уже имеющимися файлами для access осталась не раскрыта. Ну да ладно.  


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.1281 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.