Php имя файла кириллица
//file archiving - файл для архивирования, в php вместо пробелов не нужно указывать "%20", лучше указывать "_" $file_archiving ='Library/Pravila_doroznogo_dvizeniya_RF.doc'; //file in archive - файл в архиве, в php вместо пробелов не нужно указывать "%20", лучше указывать "_" $file_in_archive ='Library/Pravila_doroznogo_dvizeniya_RF.zip'; //file in archive - файл в архиве, в php вместо пробелов не нужно указывать "%20", лучше указывать "_" $file_archiving1 ='Правила дорожного движения РФ.doc'; //file in archive - файл в архиве, в php вместо пробелов не нужно указывать "%20", лучше указывать "_" $file_in_archive1 ='Правила дорожного движения РФ.zip'; $size = file_size($file_archiving); echo " Скачать файл: $file_archiving1, размер файла: $size"; //if - если, isset — определяет, была ли установлена переменная значением отличным от NULL if (isset($file_archiving)) < //создаётся объект $zip_archive = new ZipArchive(); //if - если, $zip_archive ->open(getcwd()."/$file_in_archive", ZIPARCHIVE::CREATE - открывается новый zip-архив if ($zip_archive -> open(getcwd()."/$file_in_archive", ZIPARCHIVE::CREATE) == TRUE) < //к архиву добавляется файл (это можно повторить несколько раз) $zip_archive ->addFile($file_archiving, $file_archiving); //закрывается созданный архив с сохранением всех добавлений $zip_archive -> close(); $size = file_size($file_in_archive); echo " Или скачать заархивированный файл: $file_in_archive1, размер файла: $size"; > >
я слышал, что нужно забудьть вообще о русском языке в программировании, его там не существует
но тогда может есть прога, которая закидывает файлы на сервер переименовывая их в траслит?
верить — не верить ваше дело. Но то что нативной поддержки кириллицы нет в вебе — да и не только — однозначно. Можно взять и наваять простую функцию на php и пользоваться.
ИМХО . пользователю вообще глубоко начихать как и что называется. лишь была та инфа, которая нужна
Не отображаются русские имена файлов
Доброго времени суток, недавно работал со скриптом построения дерева каталогов и столкнулся со следующей проблемой. Латинские имена файлов и цифры (в имени файла или папки) отображаются прекрасно, но если встречается кириллица файл просто исчезает из выдачи. Вот листинги
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru"> head> title>Directory Tree/title> link rel="stylesheet" href="css/filetree.css" type="text/css" > script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.min.js">/script> script type="text/javascript" > $(document).ready( function() < $( '#container' ).html( 'ul class="filetree start">li class="wait">' + 'Generating Tree. ' + 'li>/ul>' ); getfilelist( $('#container') , 'Serv' ); function getfilelist( cont, root ) < $( cont ).addClass( 'wait' ); $.post( 'Foldertree.php', < dir: root >, function( data ) < $( cont ).find( '.start' ).html( '' ); $( cont ).removeClass( 'wait' ).append( data ); if( 'Serv' == root ) $( cont ).find('UL:hidden').show(); else $( cont ).find('UL:hidden').slideDown(< duration: 500, easing: null >); >); > $( '#container' ).on('click', 'LI A', function() < var entry = $(this).parent(); //alert( $(this).attr('rel') ); if( entry.hasClass('folder') ) < if( entry.hasClass('collapsed') ) < entry.find('UL').remove(); getfilelist( entry, escape( $(this).attr('rel') )); entry.removeClass('collapsed').addClass('expanded'); >else < //alert( "No" ); entry.find('UL').slideUp(< duration: 500, easing: null >); entry.removeClass('expanded').addClass('collapsed'); > > else < $( '#selected_file' ).text( "File: " + $(this).attr( 'rel' )); >return false; >); >); /script> /head> body> div id="logo"> h1> div id="pgtitle"> Directory Tree /div> /h1> /div> div id="container"> /div> div id="selected_file">/div> /body> /html>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
PATHINFO PHP КИРИЛЛИЦА
Функция pathinfo в PHP используется для получения информации о пути к файлу. Она возвращает массив, содержащий информацию о пути — директорию, имя файла и расширение.
Однако, если имя файла содержит кириллические символы, то возникают проблемы. При использовании pathinfo на кириллических именах файлов, функция возвращает некорректные значения.
Для того чтобы получать корректную информацию, нужно использовать функцию mb_convert_encoding , которая позволяет перекодировать строку в нужную кодировку. Например, для перекодирования строки из Windows-1251 в UTF-8 используется следующий код:
$filename = ‘имя_файла.txt’;
$filename = mb_convert_encoding($filename, ‘UTF-8’, ‘Windows-1251’);
После перекодирования можно использовать функцию pathinfo для получения информации о пути к файлу:
$path_parts = pathinfo($filename);
echo $path_parts[‘dirname’] . ‘
‘;
echo $path_parts[‘basename’] . ‘
‘;
echo $path_parts[‘extension’] . ‘
‘;
echo $path_parts[‘filename’] . ‘
‘;
#47 Уроки PHP — Учим язык PHP, Передача параметров методом GET на языке PHP
How To Get File Name From a Path in PHP Example — PHP basename() Function — PHP pathinfo() Function
Автозагрузка классов в PHP
[ Learn PHP 5 In Arabic ] #71 — File System — PathinfoPHP FileSystem Functions Tutorial in Hindi / Urdu
PHP 2023. Установка PHP 8.x, ruphp.com и первый запуск программы. Окружение для разработки
Валентин Удальцов. Утечки памяти в PHP: контроль, предотвращение, инструментарий
PHP extracting zip archives with cyrillic filenames problem
Наткнулись на проблему, при распаковке zip архива (php7), если в именах русские символы получаем каракули (в нашем случае только они и присутствуют), странным способом перекодированные. Создаем архив используя ДОСовскую кодировку 866 с ней нет проблем со встроенными в винду зип-архиватором, если использовать 1251 в винде до 8-ки опять же каракули.
$zip->addFile($pathFrom . '/' . $doc->hashedName, mb_convert_encoding($doc->originalName, 'CP866', 'UTF-8'));
$Zip = new ZipArchive(); $open = $Zip->open('in_01122016000000.zip'); $length = $Zip->numFiles; for($i = 0; $i < $length; $i++) < echo $Zip->getNameIndex($i) . ' ' . mb_convert_encoding($Zip->getNameIndex($i), 'UTF-8', 'UTF-8, CP866') . '
'; >
Заглянув в исходники zip расширения, находим, что начиная с php 5.6 при получении имени файла вызывается _zip_string_get, где используется логика угадывания кодировки (/* start guessing */) и для получения не измененной строку нужно указать флаг ZIP_FL_ENC_RAW. Пока в официальной документации о такой возможности умалчивают, речь только о флаге ZipArchive::FL_UNCHANGED — до изменений.
//zip.h //#define ZIP_FL_ENC_RAW 64u /* get unmodified string */ echo mb_convert_encoding($Zip->getNameIndex($i, 64), 'UTF-8', 'UTF-8, CP866') . '
';
$stat = $Zip->statIndex($i, 64); echo mb_convert_encoding($stat['name'], 'UTF-8', 'UTF-8, CP866') . '
';
PHP функции file_exists, is_file, is_readable не работают с кириллицей. Как быть?
PHP функции file_exists, is_file, is_readable не работают с кириллицей. Как быть? Файл сохранял в во все возможные кодировки, локакали и внутренние кодировки скрипта устанавливал — не помогает.
Lower, upper и LIKE в SQLite не работают с кириллицей
Недавно начал изучать SQLite и наткнулся на проблему — lower() , upper() и LIKE в SQLite не.
Игры не работают! Что делать? Как быть?
Люди подскажите что делать? Купила диск "Системный-2011 windows XP SP3"Установила как положено.
В папке с шаблоном, функции WordPress работают только в index.php
Здравствуйте. Собственно, в папке с шаблоном есть index.php, но есть и другие php файлы. Так вот.
Сообщение от Platinumix
Сообщение от Platinumix
Задать вопрос нормально. А именно:
-привести код скрипта;
-ошибки, полученные в результате выполнения скрипта;
-полученный результат;
-желаемый результат.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
$sFilePath = __DIR__ . DIRECTORY_SEPARATOR . "./тест/тестовый_file.txt"; echo $sFilePath . "
"; if (file_exists($sFilePath)) { echo 1 . "
"; } else echo 0 . "
"; if (is_file($sFilePath)) { echo 1 . "
"; } else echo 0 . "
"; if (is_readable($sFilePath)) { echo 1 . "
"; } else echo 0 . "
";
Файл реально существует и если в пути всё будет полностью на латинице то всё работает. ОС windows 7 x64, php 5.4 apache 2.4
Думаю у тебя проблемы с кодировкой.
Добавлено через 1 минуту
А так все рекомендуют пользоваться латиницей, чтобы не было мешанины и проблем с кодировками.
Сообщение от Platinumix
Это здорово, первый пункт моей просьбы Вы выполнили. А их там 4 было. Как еще мне нужно просить Вас, чтобы Вы сказали мне что выводят Вам все эти echo.
Вытащите название русское файла/директории при помощи функций PHP.
$path = __DIR__ . DIRECTORY_SEPARATOR; $dh = opendir($path); while($fileName = readdir($dh)){ print strtr("File: :fileName, exists :exists, is_file :is_file, is_readable :is_readable\r\n", array( ':fileName' => $path . $fileName, ':is_file' => is_file($path . $fileName), ':is_readable' => is_readable( $path . $fileName ), )); } closedir($dh);
Сообщение от pav1uxa
Это здорово, первый пункт моей просьбы Вы выполнили. А их там 4 было. Как еще мне нужно просить Вас, чтобы Вы сказали мне что выводят Вам все эти echo.
Echo выводят следующее:
D:/webserver/site.loc/www/тест/тестовый_file.txt
0
0
0
Мне нужно, что бы они выводили 1,1,1. Ошибок в результате работы скрипта нигде нет.
Сообщение от Platinumix
Echo выводят следующее:
D:/webserver/site.loc/www/тест/тестовый_file.txt
0
0
0
Мне нужно, что бы они выводили 1,1,1. Ошибок в результате работы скрипта нигде нет.
Хорошо. Если действительно такой файл существует по такому пути, то скорее всего проблема в кодировке самого файла скрипта. Попробуйте один из вариантов:
$sFilePath = mb_convert_encoding($sFilePath, 'Windows-1251', 'UTF-8');
$sFilePath = __DIR__ . DIRECTORY_SEPARATOR . "./тест/тестовый_file.txt";
Судя по тому что echo, под windows, выводит «тестовый файл» — у ТСа скрипт в cp866, а вот файловая система скорее всего NTFS в UTF-8..
Хотя ему стоит все-таки меня не игнорировать =)
Сообщение от Tatikoma
Судя по тому что echo, под windows, выводит «тестовый файл» — у ТСа скрипт в cp866, а вот файловая система скорее всего NTFS в UTF-8..
Мм, какие-то чудеса экстрасенсорики) Как это ты по коду скрипта определяешь в какой кодировке он написан?) И сколько нужно выпить чтобы писать скрипты на cp866 😀
У меня файловая система NTFS, и если написать скрипт в UTF будет такая же фигня как у автора. А вот если написать скрипт в cp1251 то все ок.
Сообщение от pav1uxa
Мм, какие-то чудеса экстрасенсорики) Как это ты по коду скрипта определяешь в какой кодировке он написан?) И сколько нужно выпить чтобы писать скрипты на cp866
Ну честно говоря я сомневаюсь в своем утверждении, однако помню, что консолька винды работает в cp866. Соответственно если скрипт выводит текст без крякозябры — значит он выводит в cp866, чему может быть причиной конвертирование перед выводом или просто сохранение скрипта в cp866 =)
Хотя конечно никто не отменял команду chcp которая все ломает, но позволяет читать выводимые данные в других кодировках =)
Сообщение от pav1uxa
У меня файловая система NTFS, и если написать скрипт в UTF будет такая же фигня как у автора. А вот если написать скрипт в cp1251 то все ок.
Сообщение от Tatikoma
В смысле? Выводить в кракозябрах он будет или нет — это уже зависит от кодировки браузера. Точнее от соответствия кодировки скрипта кодировке браузера.
А судя по тому что там используются теги (
) в качестве переноса строки, а не \r\n — скрипт исполняют именно в браузере.
Есть два простых правила:
Скрипт и файловая система должны быть в одной кодировке.
Скрипт должен быть в UTF-8.
Следовательно, на Windows будут проблемы. И это нормально: PHP получает имена файлов в однобитной кодировке (причем каждый раз разной, в зависимости от локали винды), а работает в UTF-8.
Не используй имена файлов на кириллице, захардкоженные внутри скрипта.
Ничего перекодировать не надо: эо ужасный костыль в форме грабель, на который ты неоднократно наступишь, если будешь его использовать.
Добавлено через 3 минуты
Сообщение от Tatikoma
Ну честно говоря я сомневаюсь в своем утверждении, однако помню, что консолька винды работает в cp866. Соответственно если скрипт выводит текст без крякозябры — значит он выводит в cp866
1252 обычно это.
1251 в русской винде. Даже если консолька 866, php воспринимает ФС как 1252, 1251 и т.д. в зависимости от локали.
Но писать файлы PHP разрешено тольков UTF-8 по PSR.