Пожурите скрипт

Sonque

Новичок
Я в php нуп, всех тонкостей не знаю..
Мне для приложения на js нужен скрипт php, который возвращает json.

JS посылает на сервер GET-запрос с помощью ajax

Скрипт написал, вот:

PHP:
// Получает ключ ищет папку по ключу. Сканит папку на gif-картинки, которые собирает в массив
<?php
// тело запроса в key
$key = @$_GET['name'];
// создадим массив
$arr = array();
// просканим папки сервера на key
$imgs = scandir($key);
// пробежимся по внутренностям папки
foreach ($imgs as $item) {
// найдем все gif-картинки
    if (strpos(strtolower($item), ".gif")) {
// положим в массив
        array_push($arr, $key . '/' . $item);
    }
}
// вернем массив в JSON
echo json_encode($arr);
?>

Скрипт работает на моей локальной машине.
Как он? Может нужны какие то хедеры прописать или кодировку указать.. Или может какие-то из используемых методов уже не актуальны и выйдут из обихода со следующей версией.. Собственно интересует мнение о качестве и кроссверсионности(или как там у php-шников это называется))), спасибо!!!
 

С.

Продвинутый новичок
Эти вопросы не должны тебя волновать. По крайней мере для данного скриптешушечка на полторы строки.

И еще тебе, никогда не попадались файлы, например с таким именем "picture.gif.jpg"? Мне -- не раз.
 

Sonque

Новичок
Эти вопросы не должны тебя волновать. По крайней мере для данного скриптешушечка на полторы строки.
На этом маленьком "скриптешушечки" держится огромное приложение, в работе которого я уверен, не хотел бы чтоб весь мой труд запоролся на данном "скриптешушечки"))))


И еще тебе, никогда не попадались файлы, например с таким именем "picture.gif.jpg"? Мне -- не раз.
а как лучше? Не знаю может есть какие специальные методы для отбора именно gif-картинок



Суть скрипта: обратиться к папке на сервере по полученному ключу и собрать все изображения gif находящиеся в этой папке в массив. Сделать из массива JSON и отдать клиенту
 

С.

Продвинутый новичок
Я вам подскажу разницу между "picture.gif.jpg" и "picture.gif". В нужных вам случаях ".gif" всегда будет в конце.

Вас должно больше интересовать безопасность и "защита от дурака", а не какие-то "кроссверсионности".

Некие данные приходят под именем "name", потом по ходу переименовываются в "key", хотя на самом деле это "path". Все это кроссверсионно, но говенно. А если путь будет передан злым пользователем такой, куда он не должен лазать?
 

Single

пилот капсулы
минимум

1. проверяем хидеры на наличие "X-Requested-With: XMLHttpRequest"
2. если запрос данных не корректный возвращаем статус 400
3. [m]json_encode[/m]
 

Redjik

Джедай-мастер
Фанат
PHP:
if (isset($_GET['name']))
    echo json_encode(glob(basename($_GET['name'])."/*.gif"));
 

Фанат

oncle terrible
Команда форума
ну, это всё уже детали :)
можно ещё напихать всех тех проверок, о которых писал Single.

я вот , кстати, противник бездумного использования isset, "лишь бы не было войны ошибки".
Если мы переменную ждём обязательно, а её нет - это ошибка! Она должна быть!
А isset в данном случае, если в else у нас пусто, выступает в роли той же собаки.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Я в else в таких случаях exception кидаю, ага
в конкретно таких случаях exeption как раз нафиг не нужен. Нужно HTTP код соотвествующий кидать. :) Тут — 400 Bad Request, ну или какие нибудь подробнее, типа 406 Not Acceptable или 417 Expectation Failed
 

Redjik

Джедай-мастер
ну так можно new http400 и кидать %)
первое что под руку попалось
PHP:
    public function actionUpload($qqfile = null,$model = null, $model_id = null)
    {
        if ($qqfile && $model && $model_id)
        {
            $handler = fopen("php://input", "r");

            if ($image = Image::uploadImage($handler,$qqfile,$model,(int)$model_id))
            {
                echo json_encode(array(
                        'success'=>true,
                        'id'=>$image->id,
                        'position'=>$image->position,
                        'path'=>Image::$imagePath.'/'.$image->name
                    )
                );
                $this->checkIfOnMain($qqfile,$image->id,$model_id);
            }
            else
            {
                throw new CHttpException('400', json_encode(array('error'=>'Неверный формат файла')));
            }
        }
        else
        {
            throw new CHttpException('400', json_encode(array('error'=>'Этот браузер не поддерживается')));
        }
    }
 

флоппик

promotor fidei
Команда форума
Партнер клуба
что за богомерзкая привычка писать числовые значения в кавычках?
ну и тебе еще надо вернуть success => false как минимум, что бы адекватно обрабатывать.
 

Redjik

Джедай-мастер
флоппик
согласен, сейчас исправляю это...
а по success - там такой интерфейс у js скрипта... решил его не ковырять и так оставить
 

Redjik

Джедай-мастер
Google Chrome
пкм -> посмотреть код элемента -> network -> xkr

смотрим ajax запросы, анализируем заголовки, генерим телнетом такие же...
profit
 
Сверху