我正在编写一个脚本来将图像转换为 .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,那很好,因为它不能使用西里尔文文件/目录名称。您可以通过 php 脚本获取名称为 Cyrillic 的文件的基本名称来进行测试并获取 krakozyabry。只是这个bug,据我了解,已经存在多年=>网络上开始出现用于取文件名的自写脚本,但以我个人的经验,它们不起作用。结论是 Apache 不喜欢 Cyrillic,因此在 Internet 上寻找一些脚本来替换那些用于处理文件/目录名称的函数(如果您不使用 apache,那么我不知道)。
谢谢大家的提示。我不明白发生了什么,但代码开始在所有文件夹中执行,无论名称如何。自我解决的问题。也许在测试某些东西时弄乱了目录的权限。下面是一些重构后的工作代码。