Нічого не працює! Що робити???


Швидкі рекомендації.
1. Переконайтеся, що ви бачите повідомлення про помилки, якщо вони виникають.
Для цього треба додати в початок скрипта 2 рядки
ini_set ( 'display_errors' , 1 );
error_reporting ( E_ALL );
Хоча в деяких випадках це все одно не допоможе. Тоді дивіться помилки в логах веб-сервера.
Ще можна додати в файл .htaccess рядок
php_flag display_errors 1 Обов'язково прибрати всіх собак (@) з коду!
Якщо апач видає помилку 500 - значить треба дивитися текст помилки в балці помилок веб-сервера.

2. При проблемах з MySQL (supplied argument is not a valid MySQL result resource ) під рядком, де сталася помилка, обов'язково треба вивести на екран mysql_error() і сам запит - для візуального контролю і копіювання на форум. повторюю - вивести треба ЗАПИТ! А чи не PHP-код, який його формує.

3. При роботі з зображеннями, щоб побачити повідомлення про помилку, обов'язково треба здогадатися відключити висновок заголовка, говорить браузеру, що далі йде картинка.
І, природно, звертатися до скрипту безпосередньо, а не через тег <img>!

4. При проблемах у аплоаду в першу чергу дивіться масив $ _FILES ( print_r ( $_FILES ); print_r ( $_FILES ); ). Описи помилок з $ _FILES [ 'filename'] [ 'error'] є в мануалі.

5. При проблемах у взаємодії сервера і клієнта (куки, сесії, запити) - в обов'язковому порядку дивитися обмін HTTP заголовками

6. І НАЙВАЖЛИВІШЕ: запускаючи скрипт, дивіться не те, що показує браузер, а ВИХІДНИЙ 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 < 11 , $i ++) {
echo
$_POST [ 'с_$i' ];
}
скрипт нічого не виводить.
Починаємо налагоджувати.
Спочатку дивимося в вихідний код html сторінки. чи відповідає вона стандартам?
Припустимо, відповідає. Значить, проблема не в формі.
Далі, перевіряємо в скрипті - а чи є така змінна, до якої ми звертаємося - масив $ _POST?
пишемо

echo '<pre>' ;
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 код!

Сподіваюся, що я зміг хоча б трохи пояснити принципи цього заняття.
Вдалою налагодження.

by phpfaq.ru