Develstudio как сделать смену картинок из папки
Как можно сменить картинку по времени!?
Как мимум в такой постановке вопроса — у нас две переменные. это время и адрес картинки!
Любое время можно получить, в любом языке программирования!
А вот относительно картинки, можно например, пойти двумя путями!
1). Знать заранее все адреса картинок, которые будут участвовать в смене картинки по времени!
2). И как пример — использовать какую-то папку для складирования туда картинок, фото и т.д. и уже оттуда получать хитрым способом!
И второй пункт можно поделить еще на два пункта. выдавать картинку случайным образом, либо по счету!
Если интересно, то давайте продолжим!
Каждую секунду выводить случайное изображение
Начнем с вывода картинки посекундно + случайно.
Чтобы выводить картинку посекундно случайно — надо иметь много картинок в папке! У нас есть такая папка, куда сложены картинки с главной
Получим в переменную scandir, все элементы из папки /__img/__img_rotate добавим путь на сервере $home
$arr = scandir( $home . ‘/__img/__img_rotate’);
Отфильтруем в новый массив $array_img без виртуальных двух директорий . и ..
В любую переменную сложим случайно выбранное значение массива:
$perem = $array_img[array_rand($array_img)] ;
И выведем в коде картинки:
echo »;
Соберем весь код вместе:
$arr = scandir( $home . ‘/__img/__img_rotate’);
echo »;
Результат вывода каждую секунду новая картинка:

В данном случае, при выводе посекундно — новой картинки, никакого скрипта по времени добавлять и не нужно! Просто перезагружаем и через секунду будет загружается новое случайное изображение!
Как выводить новое изображение каждую минуту, каждый час!?
Мы выводили случайную картинку из массива, который и не опубликовали. давайте выведем весь массив картинок, который м ы получали в предыдущем пункте:
print_r($array_img);
Вы должны спросить — зачем я вывел весь массив с картинками! Он нам понадобится для вывода картинки по списку подряд пойдем сверху вниз.
Нам понадобится две переменные, которые не умрут после перезагрузки страницы — можно использовать сессии!
У нас будет 2 сессии $_SESSION[counter] — это будет счетчик, который будет каждый раз прибавляться +1;
Как только он достигнет конечного значения массива он будет равен 0!
if($_SESSION[counter] == count($array_img))
У нас время будет в секундах — это time(), при условии что прошло времени больше, чем $_SESSION[timer] + 60 — это в данном случае минута, если требуется поставить время на час, то вместо 60 секунд пишем 3600 — это будет час.
Если условие выполняется, то в переменную $_SESSION[counter] делаем плюс 1!
И в наш timer добавляем текущее количество секунд + 60.
А картинка будет уже выводиться по номеру counter , он будет равен от 0 до 95
И в самом конце выводим картинку.
Соберем весь код вместе:
if(time() > $_SESSION[timer] + 60)
$_SESSION[timer] = time() + 60;
echo »;

Результат вывода картинки через минуту! Сейчас $_SESSION[counter] = 1
Как выводить картинку в соответствии времени суток?!
Для того, чтобы выводить картинку в соответствии со временем суток, нам нужно эти время суток определить — их 4, утро, день, вечер, ночь.
У нас есть 4 картинки, которые мы ранее использовали в слайдере
Далее нам потребуются условия, по которым мы будем определить, какое время суток сейчас.
Если date(‘G’)(время в часах без ведущих нулей) менее 6, то присваиваем нашей переменной картинку утро.
Как только станет 7, то скрипт пойдет далее. и наткнется на условие, но уже меньше 12, то тогда у нас наступит день. загружаем картинку день!
Как только время пересчет отметку 12 — это будет вечер, выводим картинку вечер, если более 18, то выводим картинку ночь!
Это очень простой скрит.
Visual PHP для Windows
На сегодняшний день язык PHP широко распространён, он прост в освоении и понимании, и наверное поэтому он так популярен у начинающих программистов. Без знаний PHP не поправить блок голосования на сайте, не отредактировать PHP шаблон, не вставить рекламный баннер. Многие идут дальше и изучают язык более углубленно, ведь это не только интересно, но и приносит стабильный доход, благо разнообразных предложений для PHP программистов всегда в избытке.
Но что делать, если хочется чего-то большего? Если надоело писать однотипные классы для онлайн-казино, ковыряться в Joomla/Drupal/PHPBB очередного заказчика?
Думаю, что многих посещала мысль начать писать Windows программы на любимом языке PHP, но дальше поиска по интернету и поверхностного изучения таких библиотек как PHP-QT и PHP-GTK дело, как правило, не доходит. Почему? Все ответы схожи — запутанно, сложно, ненаглядно, непонятно и т.д. Но сегодня уже есть качественно новая и перспективная среда для визуальной разработки программ на PHP под Windows и имя ей — PHP Devel Studio (сокр. DevelStudio).
Что же представляет собой DevelStudio?
Это удобная и понятная визуальная среда программирования, которая позволяет создавать полноценные программы на языке PHP с поддержкой GUI. Теперь, для создания программ под Windows достаточно знать самый популярный язык программирования — PHP.
В этой статье я не буду описывать кнопочки и рюшечки этой среды разработки, не буду говорить о неких абстрактных возможностях и не буду устраивать детский сад с написанием «Hello world».
Мы поверхностно рассмотрим процесс написания полноценной программы под Windows и остановим своё внимание только на оригинальных и нестандартных решениях, которые определённо будут интересны всем.
Предыстория
Итак, в один прекрасный вечер я уже в который раз снова посетил сайт проекта «Denwer» с целью проверить, не вышло ли там обновление. К моему разочарованию ничего нового там не оказалось, по-прежнему я обнаружил лишь новую ругань в адрес разработчиков с обвинениями в выклянчивании пожертвований и абсолютном бездействии.
Меня не покидало желание отказаться от Denwer и написать свою, действителньо удобную и полезную программу для управления локальным веб-сервером. После недолгих поисков моё внимание привлекла среда разработки «DevelStudio». Она оказалось предельно удобной, понятной и самое удивительное — она открыла мне дорогу в мир Windows программ. Поразмыслив над логикой управления веб-сервером я приступил к написанию «Open Server».
Знакомство с DevelStudio
Первые несколько дней были потрачены на изучение среды и написание простейших программ. Нашлось несколько багов в работе самой среды разработки, они будут описаны в конце статьи. Так же были установлены два полезных дополнения (библиотека примеров + каталог классов и функций) и один неофициальный патч, дающий возможность сжатия программы UPX упаковщиком в момент компиляции.
Следует отметить, что у DevelStudio достаточное хорошее комьюнити, поэтому всегда есть возможность задать вопрос или получить совет у опытных пользователей среды, вплоть до самого разработчика.
DevelStudio — это этакая смесь из Delphi и PHP, щедро приправленная компонентами этих самых Delphi и PHP. Чего стоит один только Alphaskin, который я использовал самым непосредственным образом при написании программы. Но обо всём по порядку…
Написание программы
При создании проекта мы получаем пустую форму. Она является основной и именно в этой форме я не создавал никаких элементов управления, в ней мною были добавлены управляющие функции, а сама форма была сделана скрытой. Чтобы при запуске вашей программы не отображалось никаких форм в свойствах проекта нужно установить режим «Тихий». Затем были созданы следующие формы: Настройки, Просмотр логов, О программе, Ошибка и Первый запуск. За короткий срок во все формы были добавлены необходимые управляющие элементы, поля ввода, иконки и прочее. Всё это было сделано без единой строчки кода. Вот она мощь визуальной среды!
На следующей иллюстрации мы видим форму просмотра логов, а так же специальные вставки-шаблоны, они используются для организации мультиязычности. Замечу лишь, что для смены языка потребуется перезапуск программы.
Далее я начал добавлять первый PHP код. Как я уже писал, мы остановимся только на самых интересных моментах.
1. Стартовая функция (выполняется при загрузке программы)
Вот так получилось реализовать проверку на то, не была ли уже запущена программа:
$output = shell_exec('tasklist /nh /fi "Imagename eq Open Server.exe"'); // получение списка процессов $ret = iconv('CP866','CP1251',$output); if (substr_count($ret,'Open Server.exe')>1) < c('trayIcon1')->enabled = false; // отключаем трей-меню LoadForm(c('message'), LD_NONE); // загружаем форму с сообщением об ошибке >else
Вот так, например, добавляются элементы в выпадающее меню:
$mm = new TMenuItem; $mm->caption = t("menu_9"); // t - это функция мультиязычности, здесь будет написано Выход $mm->loadPicture("server/system/data/exit.bmp"); // подгружаем иконку $mm->onClick = exitfunc; // функция выполняющая остановку сервера / выход из программы
А вот так удалось решить задачу с определением битности Windows и проверке на наличие установленных компонентов Microsoft Redistributable C++. Битый час я не мог понять, почему в 32 и 64 битных версиях Windows ключи реестра имеют разное значение, а то они и вовсе не там, где предполагалось.
if(getenv("PROCESSOR_ARCHITEW6432")=="AMD64" || getenv("PROCESSOR_ARCHITECTURE")=="AMD64")< $output = shell_exec("REG QUERY HKLM\\Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"); // запрос в реестр $ret = iconv('CP866','CP1251',$output); if (substr_count($ret,'')')<1) < c('trayIcon1')->enabled = false; LoadForm(c('proc'), LD_NONE); // загрузка формы с предложением установить недостающие компоненты > >else< $output = shell_exec("REG QUERY HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"); $ret = iconv('CP866','CP1251',$output); if (substr_count($ret,'')')enabled = false; LoadForm(c('proc'), LD_NONE); // загрузка формы с предложением установить недостающие компоненты > >
2. Форма просмотра логов
Здесь всё было предельно просто — чтение лог-файла и вывод содержимого в форму, но пришлось пойти на хитрость, чтобы сделать автоматическую установку курсора в конец списка (возможности среды этого не позволяют).
Вот как изначально я обрабатывал переключение табов и установку курсора в конец лога:
$WshShell = new COM("WScript.Shell"); if (c("pages1")->pageIndex == 0) c("memo1")->setFocus(); // установка фокуса на текстовое поле elseif (c("pages1")->pageIndex == 1) c("memo2")->setFocus(); . elseif (c("pages1")->pageIndex == 6) c("memo7")->setFocus(); $WshShell->SendKeys("^"); // нажатие клавиши END чтобы попасть в конец $WshShell->SendKeys(""); // Нажатие клавиши HOME чтобы вернуться в начало последней строки
Как мы видим, были использованы компоненты COM, но по совету одного доброго человека этот код был превращён в следующий:
$ppindex = c("logs->pages1")->pageIndex; $obmemo = c("logs->memo".($ppindex+1)); // определяем активный таб $cnlines = $obmemo->items->lines; // получаем содержимое $seltn = strlen( $obmemo->text ) - strlen($cnlines[ count($cnlines)-1 ]); // определение последней строки $obmemo->setFocus(); $obmemo->selStart = $seltn; // установка курсора в начало строки $obmemo->selLength = 0; // установка длины выделения
3. Форма настроек
Чтение и запись настроек в DevelStudio происходят достаточно просто и очевидно:
ini :: open("server/system/config.ini"); // открываем файл настроек ini :: read("main", "lang", $lang); // читаем параметр ini :: write("main", "lang", c("settings->combobox1")->inText); // сохраняем параметр
Но кое с чем пришлось повозиться — это получение списка свободных дисков в системе.
Вот что сперва получилось, это довольно интересно:
$fso = new COM("Scripting.FileSystemObject"); $disks = array(); foreach($fso->Drives as $disk) $disks[] = $disk->DriveLetter; // получаем массив дисков $diskarr = array("D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"); $diskar = array(); foreach($diskarr as $fffile) if($fffile == $os_vdisk)<$diskar[] = $fffile;>else // если диск существует, то исключаем его из списка c("combobox2")->text = implode("\n",$diskar); $icounter = 0; foreach($diskar as $fffile) itemIndex = $icounter; $icounter++;>
Здесь снова был использован компонент COM и опять же не обошлось без доброго совета со стороны.
Я подключил DLL библиотеку phposinfo.dll и итоговый код получился таким:
$dliters = array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"); $diskar = array(); $icounter = 0; $icount = true; foreach ($dliters as $dliters) // перебираем массив дисков < if ($dliters == $os_vdisk) < $diskar[] = $dliters; $icount = false; >else < if (osinfo_drivetype($dliters . ":") == 1) // функция из phposinfo.dll для получения кода состояния диска < $diskar[] = $dliters; // если ответ единица добавляем букву диска в список свободных if ($icount) $icounter++; >> > c("combobox2")->text = implode("\n", $diskar); // добавляем массив дисков в выпадающий список c("combobox2")->itemIndex = $icounter; // указываем выбранный пункт списка
4. Функция запуска локального сервера
Это самая объёмная функция, нужно было сделать перезапись конфигурации модулей по шаблонам, запустить виртуальный диск, запустить Apache, Mysql, FTP сервер и написать ещё много всего интересного, однако и тут DevelStudio и форум поддержки среды позволили мне реализовать всё задуманное. Далее несколько интересных моментов…
Были проблемы с определением системного диска и получения пути до HOSTS файла, в итоге всё оказалось легко и просто:
$hostsfile = winLocalPath(CSIDL_WINDOWS) . "/System32/drivers/etc/hosts";
Запускаем виртуальный диск (здесь используется системная утилита subst.exe, а так же получение локальной директории и пути до системной папки Windows):
Shell_Execute(0, 'open', 'subst.exe', $os_vdisk . ': "' . substr(realpath('./'), 0, strlen(realpath('./')) - 1) . '"', strtr(winLocalPath(CSIDL_WINDOWS).'/System32/','/','\\'), 0);
Запуск Apache (функция Shell_Execute позволяет запустить стороннюю программу в фоне и без ожидания ответа):
Shell_Execute(0, 'open', 'os-httpd.exe', '', $realospath . '\\server\\http\\' . $os_httpdriver . '\\bin\\', $os_window);
Хотелось бы особо отметить, что один из багов DevelStudio — зависания при использовании фоновых процессов в Windows XP. Из-за этого пришлось сделать все процессы не фоновыми и, как следствие, отключать трей-меню на моменты запуска/остановки сервера. Если этого не сделать может показаться что программа зависла, ибо в моменты выполнения real-time процессов элементы управления ни на что не реагируют.
Для создания красивого и одинаково выглядящего во всех версиях Windows трей-меню был использован компонент Skin, а так же один из скинов AlphaSkin, который был мною предварительно отредактирован.

После компиляции на выходе у нас получается обычный исполняемый EXE файл, т.е. собственно сама наша программа. PHP код содержится там в бинарном скомпилированном виде, его дешифровка невозможна, что в принципе позволяет уже сейчас писать платный коммерческий софт. Впрочем преобразование PHP кода в байт-код (используется расширение BCompiler) можно отключить в настройках DevelStudio.
Как видите, с помощью PHP и DevelStudio мне удалось реализовать все поставленные перед собой задачи. Не обошлось без вызова системных утилит и встроенных функций среды разработки. Получилась полноценная Windows программа написанная на языке PHP, точнее даже комплекс программ для организации веб-сервера на локальном компьютере, сейчас проект Open Server живёт и успешно развивается.
Настоящее и будущее DevelStudio
Сейчас DevelStudio базируется на движке PHP 5-ой версии, однако автор ведёт усиленную работу над созданием особой ветки улучшенного PHP — так называемого движка Orion, который будет использоваться в DevelStudio уже со следующей версии. С одной стороны это пугает тем, что больше никаких обновлений от оригинального PHP в самой среде не появиться, кроме того что уже есть в той версии PHP, которая выбрана для разработки Orion. С другой стороны хочется надеяться, что движок Orion преподнесёт нам не мало новых вкусностей, а обещают там очень многое:
Отечественные разработчики Devel Studio, сообщают, что их новая среда разработки уже скоро начнёт работать с собственным скриптовым языком программирования Orion, синтаксис которого будет сочетать популярный PHP + новые конструкции языка.
Также сообщается то, что для Devel Studio почти готов абстрактный игровой движок, который основывается на ZenGL и в него будет подключен Orion. GameAbstract Framework — открытый игровой фреймворк быстрой и удобной разработки 2D-игр на Pascal (Delphi/FreePascal), Orion и на прочих ЯП. Абстракция позволит разработчикам заниматься именно логикой игры, взяв на себя всю остальную рутину.
GameAbstract позволит создавать игры на популярные платформы: Windows, Linux, MacOS (а в будущем и iPhone/iPad). Разработчик будет волен выбрать графический интерфейс: OpenGL, DirectX или OpenGL ES для мобильных систем. Физика будет реализована на основе технологии Chipmunk.
По материалам сайта gcup.ru от 2011-05-23
Заключение
В целом DevelStudio оставила после себя хорошее впечатление, далее мои скромные выводы.
Баги:
— зависание php программы при использовании фоновых процессов в WinXP;
— фоновые процессы не убиваются после отработки (занимают память);
— изменение размеров не вручную, а стрелками больше/меньше приводит к краху;
— нельзя использовать режим отладки и вывод ошибок, иначе изменения не сохраняются;
— без патча не работает упаковщик UPX;
Минусы:
— наличие некоторых багов;
— программы получаются довольно объёмные, но при использовании UPX разница не так велика;
— больший объём занимаемой оперативной памяти, чем аналог на Delphi или С++;
— крайне плохая официальная документация, скудная и устаревшая;
Плюсы:
— простота в освоении и удобство разработки;
— хорошее комьюнити;
— широкие возможности по использованию сторонних библиотек;
— высокая скорость разработки программ;
— наслаждение от написания Windows программ на языке PHP 😉
На мой взгяд, визуальная среда разработки DevelStudio — это очередной шаг к размытию границ между выбором языка разработки программ под Windows. Пишите полезные программы, развивайтесь и не бойтесь экспериментировать!
UP: Откуда в Вас столько ненависти? Это всего лишь очередной способ использования языка PHP. Довольно интересная среда разработки, хотя бы в плане саморазвития. Никто не говорит что нужно бросать всё и садиться писать Windows программы на PHP.
Просто задайте себе вопрос — если бы вы узнали, что ваша машина может не только ездить, но и летать, разве вам это было бы не интересно? Ах да, ведь для полётов есть самолеты, не так ли.
- develstudio
- php
- программирование
- средства разработки
Как найти ошибку в своем коде?
Быстрые рекомендации.
1. Убедитесь, что вы видите сообщения об ошибках, если они возникают.
Для этого надо добавить в начало скрипта 2 строчки
ini_set(‘display_errors’,1);
error_reporting(E_ALL);
Хотя в некоторых случаях это всё равно не поможет. Тогда смотрите ошибки в логах веб-сервера.
Ещё можно добавить в файл .htaccess строчку
php_flag display_errors 1
Обязательно убрать всех собак (@) из кода!
Если апач выдаёт ошибку 500 — значит надо смотреть текст ошибки в логе ошибок веб-сервера.
2. При работе с БД надо её настраивать так, чтобы она сообщала об ошибках.
Для mysqli, перед коннектом всегда должна быть строчка
Если используется PDO, то соединяться, как написано здесь: http://phpfaq.ru/pdo
3. При работе с изображениями, чтобы увидеть сообщение об ошибке, обязательно надо догадаться отключить вывод заголовка, говорящего браузеру, что дальше идет картинка.
И, естественно, обращаться к скрипту напрямую, а не через тег !
4. При проблемах в аплоаде в первую очередь смотрите массив $_FILES ( print_r($_FILES); ). Описания ошибок из $_FILES[‘filename’][‘error’] есть в мануале.
5. При проблемах во взаимодействии сервера и клиента (куки, сессии, запросы)- в обязательном порядке смотреть обмен HTTP заголовками
6. Закомментируйте строчку с header(«Location:»), если ищете обшибку в обработчике POST запроса
7. При отладке AJAX запросов смотрите ответ сервера в FireBug-e и его аналогах (кнопка F12 в любом браузере), вкладка Network — Preview.
8. И САМОЕ ВАЖНОЕ: запуская скрипт, смотрите не то, что показывает браузер, а ИСХОДНЫЙ HTML код!.
Получив сообщение об ошибке, вы можете его прочитать и исправить.
Если не справились — пишите на форум. При этом КОПИРУЙТЕ сообщение об ошибке, и КОПИРУЙТЕ небольшой — 3-5 строк — кусок кода, на который указывает ошибка. Повторяю — КОПИРУЙТЕ! никакой отсебятины!
Если вы всё равно не нашли ошибку — читайте дальше:
Введение. Очень важное.
Ты написал программу, а она не работает.
Вариантов ты видишь немного — либо сидеть и пытаться умственным усилием обнаружить ошибку, в сотый раз просматривая код, либо пойти на форум и попросить, чтобы там тебе нашли ошибку.
Самое интересное, что есть третий, в сто раз лучше первых двух.
Этот способ называется «Отладка программы». По-английски — debug.
Заключается он в том, чтобы заставить программу саму показать, где в ней ошибка.
Это мало того, что получится быстрее, чем спрашивать на стороне — так зачастую это единственный способ решить проблему. Единственный.
Я тебе сейчас открою страшный секрет. В мире НЕТ программистов, которые пишут код, как художники на Арбате — сел, наваял, отдал. Нету. И не будет.
Процесс написания программы — циклический: Написал кусок кода — посмотрел, как работает. Если не работает — ищем ошибки. Работает — пишем дальше.
Только так. Других вариантов нет.
Больше того. В большинстве случаев совершенно бесполезно вываливать на форум свой код, и спрашивать — «В чём ошибка?». На форуме не сидят волшебники вперемешку с телепатами. И гадалок с прорицателями — тоже нет. Поэтому отгадывать, в чём, теоретически, может быть ошибка, никто не будет. Ошибку найти может только хозяин программы. На своём сервере. Со своими настройками и опечатками. Поэтому локализовать ошибку — найти место, где она происходит, определить тип ошибки — можно только самостоятельно. А вот исправить её на форуме помогут. Если не получится самому.
Те, кто приходит к веб-программированию от дизайна, или от игр, или от нечего делать, просто не знают этой страшной тайны: Основное время программиста уходит не на написание кода. Основное время программиста уходит на поиск ошибок и отладку. Это не шутка. Это правда. И если вы решили заняться программированием, то вам придётся искать ошибки точно так же, как это делают все остальные.
К сожалению, очень много людей приходит к PHP вообще без опыта программирования и, как следствие — никогда не слышали об отладке.
А это и есть самое главное в программировании — умение искать ошибки.
И мы с тобой сейчас будем учиться их искать.
Программа не работает. Что можно сделать в этом случае?
Сообщения об ошибках PHP.
Самый твой большой помощник в деле отладки — это сам PHP. При возникновении любых проблем он сообщит тебе о них. То есть, в первую очередь ты должен убедиться в том, что если сообщение об ошибке есть — ты его увидишь.
Пояснение: Очень многие люди не понимают, что такое сообщение об ошибке. В основном эти люди делятся на две категории. Первая считает, что сообщения об ошибках — это блажь разработчиков языка, надоедливый сервис, сделанный для того, чтобы программисту было не скучно. И избавляться от сообщений надо любыми доступными способами. Вторая категория не выросла из школьного возраста и воспринимает не смысл ошибки, а лишь сам факт. Принимают пхп за стервозного завуча, который ругает не по делу, а абстрактно, за то, что оболтус. То есть, факт появления ошибки вызывает у этих людей только негативные эмоции, а в смысл они даже не пытаются вчитываться.
Это чудовищные заблуждения. Сообщения об ошибках — это ПОМОЩЬ! Это громадная помощь программисту. Как ей воспользоваться, мы рассмотрим ниже.
Даже самый рабочий код, которому ты на 100% доверяешь, и который на соседней машине работает, как часы, может выдавать сообщение об ошибке. Причин тому может быть бесконечное множество. Это и такой распространенный случай, как отсутствие прав доступа к файлам, и такие экзотические, как запрещение провайдером выполнения самых распространенных и безобидных функций.
Твоя задача — обеспечить интерпретатору возможность сообщить тебе об ошибке при возникновении оной.
Ты должен быть уверен, что если выполнение программы вызывает ошибку, то ты эту ошибку увидишь.
Что интерпретатору не запрещено сообщать тебе об ошибке.
Что ты запросил все варианты вывода сообщения об ошибке.
Во-первых, надо выяснить, выводятся ошибки на экран или пишутся в лог. Обычно, домашний, или тестовый сервер настраивается так, чтобы ошибки выводились на экран. Рабочий же сервер, с сайтом в публичном доступе ОБЯЗАТЕЛЬНО должен быть настроен так, чтобы ошибки не выводились на экран (поскольку посетителю они все равно ничего не скажут, а программист их не увидит), а писались в лог, где программист их увидит.
Если ты не уверен, и не знаешь, где посмотреть, а ошибку найти надо срочно, то напиши в самом начале скрипта две строчки
ini_set(‘display_errors’,1);
error_reporting(E_ALL ^E_NOTICE);
Эти две строки заставят выводить сообщения обо всех критических ошибках на экран.
Если никаких ошибок не выведется, надо написать
error_reporting(E_ALL);
Это очень сильно поможет, показав несуществующие переменные и другие мелкие ошибки, которые обычно игнорируются, но от которых может зависеть работоспособность программы.
ВАЖНО! В случае ошибки синтаксиса, по очевидным причинам, установка с помощью ini_set не сработает.
Поэтому лучше на неё не надеяться, а либо исправить в php.ini (или в .haccess добавить строчку php_flag display_errors 1 ), либо искать ошибку в логе.
Во-вторых, убедись, что в коде отсутствуют символы ‘@’ перед именами функций. Этот запрещает вывод сообщения об ошибке. Хорошенькое дело! Ты ошибку ищешь-ищещь, а сам же своей программе рот заткнул.
Если ты уверен, что ошибка есть, но на экран она всё равно не выводится — найди лог ошибок веб-сервера. Обычно, это файл с названием error_log. Где он находится — надо посмотреть в документации или спросить в службе поддержки провайдера.
При возникновении проблем с функциями mysql (supplied argument is not a valid MySQL result resource) под строкой, где произошла ошибка, обязательно надо вывести на экран mysql_error() и сам запрос — для визуального контроля и копирования на форум.
При работе с изображениями, чтобы увидеть сообщение об ошибке, обязательно надо догадаться отключить вывод заголовка, говорящего браузеру, что дальше идет картинка.
При аплоаде в первую очередь смотрите массив $_FILES.
При проблемах во взаимодействии сервера и клиента — в обязательном порядке смотреть обмен HTTP заголовками
И всегда смотрите не то, что показывает браузер, а ИСХОДНЫЙ HTML код!
Допустим, сообщение об ошибке появляется, и ты его получил. Что делать дальше? Очень просто — прочесть и исправить. Если не хватает знания английского языка, то стоит либо воспользоваться переводчиком, либо взять значащую часть этого сообщения и запросить Google. 90% вероятности, что кто-то с такой ошибкой уже сталкивался, и ты тут же прочтешь ответ.
Если же не нашел, то задай вопрос в форуме, точно скопировав небольшой (3-5 строк) кусок кода, в котором произошла ошибка, точно указав строку, о которой говорится в сообщении об ошибке, а так же — самое главное! — само сообщение об ошибке.
Согласись, что с такой информацией тебе на форуме помогут гораздо скорее и качественней?
Отладка и поиск ошибок в своем алгоритме.
Но бывает так, что программа не вызывает ошибок, но все равно не работает, или работает не так, как надо.
Тут уже виноват или алгоритм или какие-то внешние факторы.
Однако и тут можно найти место, где происходит ошибка.
Но только при одном условии.
что ты четко представляешь, что делает твоя программа, каждая функция, каждая строка в ней. Потому, что если ты представляешь, то можешь предсказать, какие значения должны иметь переменные на каждом этапе выполнения.
А дальше все ОЧЕНЬ просто!
Во-первых, надо разделить программу на логические блоки.
Допустим, скрипт выводит форму, получает ее, и записывает данные в базу. ТРИ шага! И в любом из них может быть ошибка, приводящая к тому, что данные в базу не записываются.
Надо проконтролировать на каждом из участков — все ли переменные имеют то значение, которое ожидается.
Программа ведь работает с переменными.
Как проверить?
Выводить все используемые переменные на экран! И визуально контролировать их содержимое.
Всего-то лишь написать проблемных местах var_dump($var) и выяснится, что переменная-то пустая!
И уже можешь пойти на форум не с вопросом «у меня вот код на 100 строк, где ошибка?», а «я написал функцию, но почему-то, когда обращаюсь в ней к переменным, они все пустые». или «из формы не передаются переменные».
Между этими двумя способами задания вопросов — пропасть.
Первый не может тебе помочь никак. Ты, собственно, и сам не знаешь, что у тебя за проблема. А при втором ты уже знаешь проблему, и, если сам не справился с ее решением, то можешь задать на форуме конкретный вопрос.
Еще очень поможет избежать ошибок в программе выставление error_reporting в E_ALL с самого начала работы скрипта.
Если при отлове критических ошибок сообщения о потенциальных ошибках могут нам помешать увидеть главную, то при разработке нам желательно видеть все — и потенциальные в том числе. Скажем, при E_ALL, при обращении к несуществующей переменной, PHP выдаст предупреждение. То есть, тебе не придется самому выводить переменную, чтобы выяснить, что ты не присвоил ей никакого значения — РНР тебя сам предупредит.
Пример отладки.
Из html формы передаются чекбоксы с именами c_1, c_1, c_3. c_10
В скрипте мы пытаемся в цикле вывести
for ($i=1, $i echo $_POST[‘с_$i’];
>
скрипт ничего не выводит.
Начинаем отлаживать.
Сначала смотрим в исходный код html страницы. соответствует ли она стандартам?
Допустим, соответствует. Значит, проблема не в форме.
Далее, проверяем в скрипте — а есть ли такая переменная, к которой мы обращаемся — массив $_POST?
пишем
echo »;
var_dump($_POST);
Убеждаемся в том, что массив есть и все элементы на месте. Значит, проблема не в передаче.
Значит, мы как-то неправильно обращаемся к массиву.
обращаемся мы к нему так: $_POST[‘с_$i’]
Надо проверить — а во что превращается ‘с_$i’?
делаем echo ‘с_$i’; и видим. совсем не то, что ожидали увидеть.
И вот теперь уже идем либо читать документацию про строки в пхп (что предпочтительнее), либо — на форум, с вопросом «почему у меня переменная не заместилась своим значением». Каковой вопрос будет гораздо лучше звучать, чем «у меня форма не работает».
Понятно?
Следует понимать, что здесь приведён пример, Нереальный. Показан алгоритм действий.
В реальности, при error_reporting(E_ALL); PHP сразу же показал бы, что индекс массива у вас неправильный.
Самое важное — знать, что ты хочешь получить.
Примерно половина вопросов на форумах вызвана тем, что человек делает что-то. НЕ ЗНАЯ, что именно!
Самый гениальный вопрос всех времён и народов: «у меня база съела все переводы строк из текстарии».
Человек просто не дал себе труд посмотреть, как будет выглядеть HTML, который он хочет получить, и решил, что переводы строк съела база.
И так во всём.
Непризнанный гений строит сложный SQL запрос, а когда его спрашивают, как запрос должен выглядеть — он только хлопает глазами. ВСЕГДА СНАЧАЛА составьте запрос руками и выполните в консоли или phpmyadmin! А после того, как получили нужный запрос и отладили — милости просим, составляйте его на пхп.
Работа с удалённым хостом через сокет по протоколу HTTP — то же самое! Сначала научитесь выполнять все команды руками, посмотрите ответы сервера глазами, а потом моделируйте этот диалог в пхп.
Работа с яваскриптом по тому же методу описана в факе «на танке»
Запомните — на пхп вы работаете только со СТРОКАМИ! HTML страница, которую вы создаёте скриптом — это для пхп всего лишь набор строк! Ему без разницы, что в этом наборе — теги img, script или frame. Пхп за вас не сделает переводы строк, не нарисует яваскрипт. Если вы не знаете яваскрипта — то не пытайтесь создавать программу на нём с помощью PHP.
Открывая соединение с удалённым хостом, вы посылаете строку в сокет, вы получаете строку из сокета. Пхп ничего не понимает в этих строках и за вас диалог вести не будет! Это ВЫ должны чётко понимать, что вы хотите послать в сокет, и что получить! Поэтому возьмите программу telnet, соединитесь с нужным хостом и пробуйте сначала САМИ сделать то, что хотите заставить сделать пхп.
Если у вас не работает скрипт с сокетами — бегом в телнет смотреть, что происходит!
SQL запрос — это СТРОКА. Вы должны себе чётко представлять, какой запрос получится в результате вашего хитроумного пхп-кода! Сервер БД не понимает конструкций intval, date, mktime и так далее! Это всё пхп-код. Результатом которого будет являться строка корректного SQL запроса. прежде, чем писать пхп код, вы должны ЧЁТКО СЕБЕ ПРЕДСТАВЛЯТЬ, КАК ДОЛЖЕН ВЫГЛЯДЕТЬ SQL ЗАПРОС В РЕЗУЛЬТАТЕ!
Если у вас не выполняется SQL запрос 0 выводите его на экран и смотрите — что нагородили своим скриптом!
Заключение.
Отладка — главное занятие программиста.
Отладка — единственный и самый мощный способ найти ошибку в программе.
Отладка состоит из двух основных компонентов:
1. Максимально упрощать пример. Если у вас не работает программа, которая рисует форму,получает данные, записывает данные формы в базу и выводит их снова, то разбейте программу на составляющие и выполняйте по очереди.
Если у вас не работает сложная подпрограмма определения работоспособности кук — напишите сначала тест в две строчки чтобы убедиться, что вы хотя бы можете выставлять и читать куку.
2. Вывод отладочной информации.
Проверяйте значение КАЖДОЙ переменной! Каждого значения, возвращаемого функцией!
Не работает локейшен? Выведите его на экран и скопируйте в браузер!
В файл записывается пустая строка? проверяйте составляющие этой строки на каждом этапе ее создания и выводите на экран!
Убедились, что на экран выводится? Тренируйтесь писать в файл, на тестовой строке! Забитой прямо в скрипт! Уменьшайте количество неизвестных!
И всегда смотрите не то, что показывает браузер, а ИСХОДНЫЙ HTML код!
Надеюсь, что я смог хотя бы немного объяснить принципы этого занятия.
Удачной отладки.
1 Allway Sync 10.3.8
Allway Sync – программа синхронизатор данных. Будет крайне полезна тем, кто работает на нескольких компьютерах. Программа работает по алгоритму, который не зависит от системных часов компьютера, тем самым для нее дата создания (которая совпадает с системным временем) совершенно не важна. Это означает что синхронизация будет безопасна и надежна. Стоит отметить также отрадный факт, программа не привязана к локальной сети, т.е. для синхронизации допустимо использовать съемные носители информации, как то USB девайсы.
1 Process Lasso 3.84.1
Размер: 580 Kb | Условия использования: Freeware
1 Analitika 2010 net 1.05.0750
Размер: 16 MB | Условия использования: Shareware
Интерфейс: RUS ENG
Операционные системы: Win 2000 Win 2002 Win XP Win Vista Win 7
Комплексная система управления торговлей. Современный программный продукт для управления товарами и услугами, складами и магазинами, кассами, кассовыми аппаратами, сейфами и банковскими счетами, покупками и продажами, покупателями и поставщиками. Данная программа является достойной альтернативой для организаций и частных предпринимателей, нуждающихся в эффективной системе автоматизации ведения учета и работает на следующих операционных системах семейства Windows (Seven, Vista, XP, 2000 Professional, 2008 Server, 2003 Server, 2000 Server). Простота и удобство работы, надежность, механизмы шифрования файлов базы данных (что обеспечивает высокую степень защиты данных от различного рода вирусов и червей, предостерегает данные от доступа некомпетентных людей или случайной порчи базы данных не профессиональными пользователями), технология создания резервных копий базы данных не прерывая работы пользователя (что дает пользователю независимость от неполадок аппаратных средств компьютера или операционной системы и легкую переносимость базы данных с одного компьютера на другой), ТЕХНОЛОГИЯ КОНСОЛИДАЦИИ ДАННЫХ НА УРОВНЕ БАЗ ДАННЫХ (ЧТО ДАЕТ ВОЗМОЖНОСТЬ ФОРМИРОВАНИЯ ЦЕЛОСТНОЙ И ОБОБЩЕННОЙ БАЗЫ ДАННЫХ ДЕЯТЕЛЬНОСТИ ВАШЕГО ПРЕДПРИЯТИЯ), высокая скорость работы и обработки данных, и мощные, но в то же время простые и понятные конструкторы отчетов, которые дают возможность получать практически любую важную информацию, группируя данные по выбранным пользователем сущностям и критериям — вот те отличия, которые делают эту программу эффективным инструментом анализа и управления.
Осуществляет консолидацию данных на уровне баз данных.
Эта новая функция дает возможность консолидировать данные нескольких филиалов или компаний в одну базу данных и, таким образом, получать целостную и обобщенную базу данных деятельности вашего предприятия. Консолидацию данных вы можете производить периодически, когда вам это нужно. Следует отметить, что однажды добавленные в консолидируемую базу данных данные не будут добавлены повторно, и для этого вам не нужно следить за тем чтобы, например, нумерация операций или первичных документов во всех филиалах вашего предприятия была уникальной.
Существуют толко два простых правила, которых следует придерживаться, если вы хотите использовать возможность консолидации данных:
• Одни и те же сущности должны иметь одни и те же коды. Например: Одна и та же материальная ценность, введенная в справочнике Материальные ценности, Услуги в различных филиалах вашего предприятия должна иметь один и тот же код. Тоже самое относится и к остальным сущностям (Валюты, Банки, Покупатели, Поставщики, Кассы, Сейфы, Структурные подразделения, Сотрудники, Единицы измерений, Группы, Выражения)
• Разные сущности должны иметь, соответственно, разные коды.
Как осуществляется консолидация данных ? Допустим имеются два магазина А и Б, которые являются филиалами одного и того же предприятия. Программа Analitika инсталлирована на компьютерах в каждом из этих магазинов. Для того чтобы осуществить консолидацию данных этих двух магазинов и получить целостную и обобщенную базу данных предприятия в целом необходимо:
• Создать архивную копию базы данных в программе Analitika установленной на компьютере в магазине А.
• Принести (либо послать по email) файл архивной копии базы данных в магазин Б и скопировать его в папку Storageofarchives, которая находится в текущем каталоге программы Analitika, установленной на компьютере в магазине Б.
• Запустить программу Analitika на компьютере магазина Б. Из главного меню программы запустить блок Инструменты » Резервные копии данных. В списке выведенных архивов найти тот архив, который был принесен из магазина А. Встать на эту строку. Далее, нажать на клавишу Консолидировать. Появится сообщение о подтверждении осуществления операции консолидации данных из архивной копии базы данных в текущую базу данных. После подтверждения (нажатие на клавишу Yes) операция консолидации будет выполнена.
Включает в себя осуществление свойственных для торговых предприятий операции:
• Покупка материальных ценностей, предоставление услуг от поставщиков.
• Наличные и безналичные платежи поставщикам.
• Продажа материальных ценностей, предоставление услуг покупателям.
• Наличные и безналичные платежи от покупателей.
• Перемещения материальных ценностей между структурными подразделениями (отделами) предприятия (склады, магазины, торговые точки).
• Выплаты сотрудникам, приходы денежных средств от сотрудников.
Получаются следующие отчеты:
• Покупки, поставки материальных ценностей, предоставление услуг от поставщиков количественно и суммарно (количество, умноженное на цену покупки, не включая налоги, налоги, количество, умноженное на цену покупки, включая налоги).
• Продажи, реализация материальных ценностей, предоставление услуг покупателям количественно и суммарно (количество, умноженное на цену продажи, не включая налоги, налоги, количество, умноженное на цену продажи, включая налоги).
• Цены продажи (прайс-листы) материальных ценностей и услуг на дату по структурным подразделениям (складам, магазинам, торговым точкам).
• Остатки материальных ценностей количественно и суммарно (по себестоимости и по ценам продажи).
• Остатки и обороты материальных ценностей количественно и суммарно (по себестоимости и по ценам продажи).
• Обороты материальных ценностей и услуг количественно и суммарно (по себестоимости и по ценам продажи.
• Перемещения материальных ценностей между структурными подразделениями (отделами) предприятия количественно и суммарно (по себестоимости и по ценам продажи).
• Остатки и обороты денежных средств по кассам, кассовым аппаратам, сейфам и банковским счетам предприятия.
• Взаиморасчеты с покупателями и поставщиками: А именно, расчет задолженностей предприятию, задолженностей поставщикам. Обороты по поставкам, платежам поставщикам, продажам, платежам от покупателей.
• Ввод операций (покупки, поставки, платежи поставщикам, продажи, реализация, платежи от покупателей) как в национальной валюте так и в любой иностранной валюте
• Одновременный учет материальных ценностей по себестоимости и по ценам продажи
• Получение остатков и оборотов денежных средств по кассам, кассовым аппаратам, сейфам и банковским счетам предприятия для каждой валюты в отдельности
• Ведение истории ценообразования для цен продажи материальных ценностей и услуг по каждому структурному подразделению (отделу) предприятия в отдельности
• Технология консолидации данных на уровне баз данных (что дает возможность формирования целостной и обобщенной базы данных деятельности вашего предприятия
• Возможность создания резервных копий базы данных не прерывая работы пользователя
• Высокая скорость работы программы и расчетов при генерировании отчетов
• База данных находится в зашифрованном состоянии
• Мощный инструмент анализа структуры базы данных и целостности данных, который уменьшает вероятность порчи данных в результате технических сбоев аппаратных средств компьютера или сбоев операционной системы
• Операционная система: Windows (Seven, Vista, XP, 2000 Professional, 2008 Server, 2003 Server, 2000 Server)
• Низкие технические требования к аппаратным средствам компьютера на котором будет работать программа:
• Минимальные требования: Pentium III, 128 MB ОЗУ, 100 MB свободного пространства на жестком диске, где установлена программа
• Рекомендуется: Pentium IV, 256 MB ОЗУ, 400 MB свободного пространства на жестком диске, где установлена программа
1 Она написала убийство 1.0
Размер: 526 MB | Условия использования: Shareware
Интерфейс: RUS есть
Операционные системы: All Win
Категория:Программы / Игры и развлечения / Логические игры
