wordpress — папка чтения PHP работает только с абсолютным путем

У меня есть функция, которая считывает папку с изображениями.
Проблема в том, что он работает, только если путь к папке является абсолютным.

Если я изменю его на динамический путь, он выдаст мне ошибку.

Вот функция:

<?php
function getPathsByKind($path,$ext,$err_type = false)
{
# Assign the error type, default is fatal error
if($err_type === false)
$err_type   =   E_USER_ERROR;
# Check if the path is valid
if(!is_dir($path)) {
# Throw fatal error if folder doesn't exist
trigger_error('Folder does not exist. No file paths can be returned.',$err_type);
# Return false incase user error is just notice...
return false;
}
# Set a storage array
$file   =   array();
# Get path list of files
$it     =   new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path,RecursiveDirectoryIterator::SKIP_DOTS)
);
# Loop and assign paths
foreach($it as $filename => $val) {
if(strtolower(pathinfo($filename,PATHINFO_EXTENSION)) == strtolower($ext)) {
$file[] =   $filename;
}
}
# Return the path list
return $file;
}
?>

и вот как я это получаю:

<?php
# Assign directory path
//$directory = '/Applications/MAMP/htdocs/domainname/wp-content/themes/themename/images/logos/';
// THIS PART ABOVE IS THE ABSOLUTE PATH AND IS WORKING.

$directory = get_bloginfo('template_directory').'/images/logos/';$files = getPathsByKind($directory,'svg');
if(!empty($files)) {
for($i=0; $i < 32; $i++){
echo '<img src="'.$files[$i].'">';
}
}
?>

Как я могу заставить это работать с относительным путем?

0

Решение

Я отвечу на ваш вопрос вопросом: почему он должен работать с относительным путем?

Наиболее вероятная причина, по которой он не работает с относительным путем, заключается в том, что текущий рабочий каталог — это не то, что вы думаете. Вы можете проверить это с getcwd() функция.

Это также самая большая проблема с относительными путями: вы можете НИКОГДА положиться на них. Текущий рабочий каталог может быть установлен снаружи скрипта с помощью chdir() в любое время по любой причине.

Всякий раз, когда вы работаете с файлами на вашем сервере, ВСЕГДА использовать абсолютные пути. Если вы хотите разрешить путь относительно файла скрипта, ВСЕГДА использование __DIR__ или же dirname(),

В вашем случае проблема с вашим кодом состоит в том, что ваш getPathsByKind Функция возвращает абсолютные пути к изображениям, которые никому не нужны, кроме localhost. Что вы можете сделать, это сделать getPathsByKind вернуть только имена файлов вместо полных путей. Заменить линию

$file[] =   $filename;

с

$file[] = pathinfo($filename, PATHINFO_BASENAME);

затем проложите путь в img тег:

for($i=0; $i < 32; $i++){
echo '<img src="/images/logos/or/whatever/'.$files[$i].'">';
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]