Пишу скрипт по конвертации изображений в .webp. Скрипт конвертирует и кладет рядом с оригиналом изображение в webp. Однако если папка содержит кириллицу, то функция imagewebp не выполняется. Вот код, в чем проблема? спасибо.
function ConvertToWebp($dir) /*В аргумент передаем абсолютный путь каталога*/
{
$absolutDir=$dir;
$results = scandir($absolutDir);/*Возвращает массив с содержанием каталога*/
foreach ($results as $value) {
if ($value=='.' || $value=='..') {/*игнорируем навигационные символы, которые возвращает scandir*/
continue;
}
if (is_file($absolutDir.$value)) {
$image=$absolutDir.$value;/*Получаем абсолютную ссылку на файл*/
$arg=mb_strtolower(substr(strrchr($image, '.'), 1));/*получаем расширение файла в нижнем регистре*/
if ($arg=='jpg' || $arg=='jpeg') {
$im=imagecreatefromjpeg($image);/*создает изображение в jpg из файла по ссылке, типо шаблона наверное*/
$infoImage=pathinfo($image);/*атрибуты файла*/
$nameImage=$infoImage['filename'];/*имя файла без расширения*/
$absoluteDirForImage=$infoImage['dirname'].'/';/*абсолютная ссылка до файла*/
$webp=imagewebp($im, $absoluteDirForImage.$nameImage.'.webp');/*конвертация созданного изображения. <абсолютная ссылка до файла><имя файла без расширения><и добавляем расширение .webp>*/
imagedestroy($im);/*удаляем шаблон изображения*/
}
if ($arg=='png') {
$im=imagecreatefrompng($image);
$infoImage=pathinfo($image);
$nameImage=$infoImage['filename'];
$absoluteDirForImage=$infoImage['dirname'].'/';
$webp=imagewebp($im, $absoluteDirForImage.$nameImage.'.webp');
imagedestroy($im);
}
}
if (is_dir($absolutDir.$value)) {
$dir=pathinfo($absolutDir.$value);
ConvertToWebp($dir['dirname'].'/'.$dir['filename'].'/');
}
}
/*profit*/
}
echo ConvertToWebp('/images/testwebp/ппп/');
Если вы используете Apache - это нормально, так как он не умеет работать с названиями файлов/директорий на кириллице. Можете протестировать взяв basename файла название которого на кириллице через скрипт php и получите кракозябры. Просто этому багу как я понимаю много лет => в сети начали появлятся самописные скрипты для взятия названий файлов, но на моем личном опыте - они не работают. Вывод таков - апач не любит кириллицу, так что ищите какие-либо скрипты на замену тем функциям для работы с названиями файлов/директорий в интернете (Если вы используете не apache, то я без понятия).
Всем спасибо за подсказки. Я не понял что произошло, но код начал выполняться по всем папкам, вне зависимости от названия. Саморазрешаемая проблема. Возможно при тестировании что-то напутал с правами на каталог. Ниже рабочий код после небольшого рефакторинга.
function ConvertToWebp($dir) /*В аргумент передаем абсолютный путь каталога*/
{
$absolutDir=$dir;
$results = scandir($absolutDir);/*Возвращает массив с содержанием каталога*/
foreach ($results as $value) {
if ($value=='.' || $value=='..') {/*игнорируем навигационные символы, которые возвращает scandir*/
continue;
}
if (is_file($absolutDir.'/'.$value)) {
$image=$absolutDir.'/'.$value;/*Получаем абсолютную ссылку на файл*/
$arg=mime_content_type($image);/*получаем расширение файла в нижнем регистре*/
if ($arg=='image/jpeg') {
$im=imagecreatefromjpeg($image);/*создает изображение из файла по ссылке*/
}
if ($arg=='image/png') {
$im=imagecreatefrompng($image);
}
$infoImage=pathinfo($image);/*атрибуты файла*/
$nameImage=$infoImage['filename'];/*имя файла без расширения*/
$absoluteDirForImage=$infoImage['dirname'].'/';/*абсолютная ссылка до файла*/
$webp=imagewebp($im,
$absoluteDirForImage.$nameImage.'.webp');/*конвертация созданного изображения. <абсолютная ссылка до файла><имя файла без расширения><и добавляем расширение .webp>*/
imagedestroy($im);/*удаляем шаблон изображения*/
}
if (is_dir($absolutDir.'/'.$value)) {
$dir=pathinfo($absolutDir.'/'.$value);
ConvertToWebp($dir['dirname'].'/'.$dir['filename'].'/');
}
}
/*profit*/
}
echo ConvertToWebp('/frontend/web/images/testwebp');
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Всем добрый день! Интересует вопрос как с помощью SQL запроса можно сделать многомерный массив
есть проблема при проверке пароля при первой проверке пароля сценарий стопорится на password_verify и урл принимает вид http://site/login?login=admin&password=12345,...
Кто знает как использовать ImageMagick в OpenServer? Скачал OpenServer вместе с ImageMagick, но при попытке им воспользоваться выдает ошибку Fatal error: Uncaught Error: Class 'Imagick'...
Как в VS Code сделать возможность по наведению курсором мыши на какую-либо функцию, объект , чтобы при этом как в sublime text выводилась подсказка...