Вот код:
function gallery($directory)
{
$allowed_types=array('jpg','jpeg','gif','png');
$file_parts=array();
$ext='';
$title='';
$i=0;
$dir_handle = @opendir($directory) or die("Ошибка открытия дирректории!");
while ($file = readdir($dir_handle))
{
if($file=='.' || $file == '..') continue;
$file_parts = explode('.',$file);
$ext = strtolower(array_pop($file_parts));
$title = implode('.',$file_parts);
$title = htmlspecialchars($title);
return array($file, $title, $ext);
}
closedir($dir_handle);
}
$directory = 'galery';
$result = gallery($directory);
foreach($result as $res);
{
echo $res;
}
Понимаю, что не правильно но не могу найти решения.
Спустя 8 минут, 21 секунда (27.06.2012 - 14:47) pak написал(а):
я так понял нужно вынести в массив титл картинок, имя с расширением, и просто расширение???
Спустя 3 минуты, 3 секунды (27.06.2012 - 14:50) korelli написал(а):
Совершенно верно. Кроме как массивом выводить эти данные я не придумал как.
Спустя 15 минут, 17 секунд (27.06.2012 - 15:05) fdr написал(а):
$title = htmlspecialchars($title);
return array($file, $title, $ext);
return array($file, $title, $ext); должен быть в самом конце
Спустя 2 минуты, 53 секунды (27.06.2012 - 15:08) korelli написал(а):
Это ситуацию не спасает.
Спустя 6 минут, 45 секунд (27.06.2012 - 15:15) pak написал(а):
Мне на ум пришло это:
$dir = './galery';
if(file_exists($dir))
{
$m = scandir($dir);
for($i=2; $i <= count($m); $i++)
{
$md = explode('.',$m[$i]);
$arr[] = array('title' => $md[0],
'file' => $m[$i],
'exp' => $md[1]
);
}
}
echo '<pre>';
print_r($arr);
echo '</pre>';
Спустя 3 минуты, 36 секунд (27.06.2012 - 15:18) fdr написал(а):
на мой взгляд ошибок много...
Ок, разделили что бы узнать расширение.
$title = implode('.',$file_parts); - снова его собираете, но здесь по идее должно оставаться одна переменная
$title = htmlspecialchars($title); - и зачем в имени файла преобразование
return array($file, $title, $ext); - после ретурна, функция завершает работу.
вопрос, для чего вам это функ. что вы хотите что бы она вам возвращаля?))
$file_parts = explode('.',$file);- $file здесь может быть и директория.
Ок, разделили что бы узнать расширение.
$title = implode('.',$file_parts); - снова его собираете, но здесь по идее должно оставаться одна переменная
$title = htmlspecialchars($title); - и зачем в имени файла преобразование
return array($file, $title, $ext); - после ретурна, функция завершает работу.
вопрос, для чего вам это функ. что вы хотите что бы она вам возвращаля?))
Спустя 9 минут, 17 секунд (27.06.2012 - 15:28) korelli написал(а):
Функцию я использую для вывода галереи.
Функция свое дело делает нормально если продолжать работу с нужными мне переменными внутри ее. Мне нужно просто вытащить их наружу для дальнейшей работы.
Функция свое дело делает нормально если продолжать работу с нужными мне переменными внутри ее. Мне нужно просто вытащить их наружу для дальнейшей работы.
Спустя 2 минуты, 1 секунда (27.06.2012 - 15:30) korelli написал(а):
Вот как все работает:
Но так как этот кусок кода у меня встречается несколько раз я хочу преобразовать его в функцию.
$directory = 'galery';
$allowed_types=array('jpg','jpeg','gif','png');
$file_parts=array();
$ext='';
$title='';
$i=0;
$dir_handle = @opendir($directory) or die("Ошибка открытия дирректории!");
while ($file = readdir($dir_handle))
{
if($file=='.' || $file == '..') continue;
$file_parts = explode('.',$file);
$ext = strtolower(array_pop($file_parts));
$title = implode('.',$file_parts);
$title = htmlspecialchars($title);
$nomargin='';
if(in_array($ext,$allowed_types))
{
if(($i+1)%4==0) echo '</br>';
echo = '<li><a href="galery.php?al='.$title.'"><img src="galery/'.$file.'" title="" alt=""/></a></li>';
$i++;
}
}
closedir($dir_handle);
Но так как этот кусок кода у меня встречается несколько раз я хочу преобразовать его в функцию.
Спустя 12 минут, 43 секунды (27.06.2012 - 15:42) fdr написал(а):
$dir_handle = @opendir('.') or die("Ошибка открытия дирректории!");
$arr = array();
while ($file = readdir($dir_handle)) {
if($file=='.' || $file == '..') continue;
$arr[] = pathinfo($file);
}
closedir($dir_handle);
return $arr[];
можно так
Спустя 17 минут, 36 секунд (27.06.2012 - 16:00) pak написал(а):
Я тебя понял так и попробовал:
В итоге получаем массив токого вида:
function scanGalery($dir = '.', $ext = array())
{
if(file_exists($dir))
{
$m = scandir($dir);
for($i=2; $i <= count($m); $i++)
{
$path = pathinfo($dir.'/'.$m[$i]);
if(in_array($path['extension'], $ext))
{
$arr[] = array('title' => $path['filename'],
'file' => $m[$i],
'ext' => $path['extension']
);
}
}
return $arr;
}
}
//вызываем
$dir = 'photo';
$extensiom = array('jpg', 'jpeg', 'png', 'gif');
echo '<pre>';
print_r(scanGalery($dir, $extensiom));
echo '</pre>';
В итоге получаем массив токого вида:
Array
(
[0] => Array
(
[title] => 1340210794f4ce
[file] => 1340210794f4ce.jpg
[ext] => jpg
)
[1] => Array
(
[title] => 1340210798p6c9
[file] => 1340210798p6c9.jpg
[ext] => jpg
)
[2] => Array
(
[title] => 13402108041b53
[file] => 13402108041b53.jpg
[ext] => jpg
)
..................................................................
Спустя 23 минуты, 42 секунды (27.06.2012 - 16:24) korelli написал(а):
Да, спасибо, это работает!