$path="./"; //путь к каталогу, в котором лежат файлы для перекодировки
function change_coding($path){
$handle=opendir($path);
while ($file = readdir($handle)){
if (is_file($path."/".$file)){
#находим по порядку все файлы и перекодируем
$text = file_get_contents($path."/".$file);//читаем данные из файла
#конвертируем текст из «utf-8» в «cp1251» с помощью функции iconv()
$text = iconv("cp1251","utf-8",$text);
file_put_contents($path."/".$file, $text);//пишем данные обратно в файл
}
elseif(is_dir($path."/".$file))
{
$current_dir = $path."/".$file;
change_coding($current_dir);//рекурсивно вызываем функцию и меняем кодировку в поддиректориях
}
}
}
change_coding($path);
выскакивает ошибка
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 71667558 bytes) in Z:\home\localhost\www\php_hacker\book\4copy\change_coding.php on line 18
вобщем директория большая решил сделать через массивы:
<?
/**************
* convert2.php
**************/
$path="./"; //путь к каталогу, в котором лежат файлы для перекодировки
function change_coding($path){
$handle=opendir($path);
while ($file = readdir($handle)){
if (is_file($path."/".$file)){
$arr=file($file);//читаем данные из файла в массив построчно
$cnt=count($arr);//число прочитанных строк из файла
$text=””;
for($i=0; $i<$cnt; $i++){
#конвертируем короткие строки из «utf-8» в «cp1251» с помощью функции iconv()
$text.=iconv( "cp1251","utf-8",$arr[$i]);
}
file_put_contents($file, $text);//пишем данные обратно в файл
}
elseif(is_dir($path."/".$file))
{
$current_dir = $path."/".$file;
change_coding($current_dir);
}
}
}
change_coding($path);
?>
но ошибка остается таже...Как решить проблему?)
Спустя 26 минут, 36 секунд (26.01.2011 - 14:45) DorianLeroy написал(а):
Делал ini_set('memory_limit', '120M'); этого оказалось мало , поставил
ini_set('memory_limit', '1200M');
set_time_limit(120);
сжирается огромное количество байтов впустую)))
Функция написана неверно - а вот где не пойму?)
ini_set('memory_limit', '1200M');
set_time_limit(120);
сжирается огромное количество байтов впустую)))
Функция написана неверно - а вот где не пойму?)
Спустя 3 часа, 9 минут, 58 секунд (26.01.2011 - 17:55) DorianLeroy написал(а):
Ребята, мне кажется эта функция будет многим полезна, у меня часто такое бывает скачиваешь сайт а он на 1251 весь, и вручную перебирать и переделывать все файлы на юникод- глупо. Помогите исправить функцию?
Спустя 6 минут, 6 секунд (26.01.2011 - 18:01) ZSH написал(а):
if (is_file($path."/".$file) && ($file != '.' || $file != '..'))
Спустя 4 минуты, 9 секунд (26.01.2011 - 18:05) twin написал(а):
Вот. Сам правда не юзал)
Спустя 14 минут, 23 секунды (26.01.2011 - 18:20) inpost написал(а):
ZSH
В больших циклах делать проверку, что это ни '.' и ни '..' существенно долго, так как проверка будет каждый раз запускаться, чем просто unset($file[0] и [1]), так как они идут первыми.
В больших циклах делать проверку, что это ни '.' и ни '..' существенно долго, так как проверка будет каждый раз запускаться, чем просто unset($file[0] и [1]), так как они идут первыми.