Управление на съобщенията за грешка



страница2/3
Дата27.05.2017
Размер301.94 Kb.
#22158
1   2   3
Да изпратим файла

Една от най-често употребяваните функции за работа с файлове в PHP е fpassthru (). Тя прочита съдържанието на отоврен файл и го изпраща направо към изхода на приложението (например към браузъра). При грешка връща FALSE. Приема само един аргумент - файловият идентификатор, върнат от fopen().
Ще демонстрираме действието й, като променим брояча от горния пример. Сега той само ще записва, но няма да пооказва на посетителите броя на посещенията. А ще бъде включен в страницата чрез изображение.


$img_file="php_logo.gif";
$filelocation="broyach.txt";

if (!file_exists($filelocation)) {


$newfile = fopen($filelocation,"w+");
$content=1;
fwrite($newfile, $content);
fclose($newfile);
}

$newfile = fopen($filelocation,"r");


$content = fread($newfile, filesize($filelocation));
fclose($newfile);

$newfile = fopen($filelocation,"w+");


$content++;
fwrite($newfile, $content);
fclose($newfile);

$fd=fopen($img_file,'r');


fpassthru($fd);
?>


Записваме този файл като counter.php.  Сега можем да го включваме в която пожелаем уеб страница, чрез "img" тага, защото файлът всъщност представлява изображение.
 


Създаване и изтриване на директориите

Ето накратко и няколко функции за работа с директории. За да създадем нова, използваме mkdir () :

mkdir ("път", "състояние")

Функцията приема два входни параметъра - името на директорията, която искаме да създадем (с относителния или пълен път до нея) и състоянието (разрешенията) за достъп и писане на файлове в нея. Например, ако искаме да създадем директория "access" във вече съществуващата "/home/mydir/logs", можем да напишем следното :

mkdir ("/home/mydir/logs/access", 0700)

Съдържанието на така създадената директория ще бъде достъпно за четене и писане от скриптовете, действащи от името на потребителя, който я е създал. Още за разрешенията ще стане дума по-късно, в последната част на този самуочител. Тъй като използвахме осмична бройна система за указване на правата, ги записахме с 0 в началото.

Премахването на директорията става с функцията rmdir (), която приема само един аргумент - името на директорията, кояти искаме да изтрием.



rmdir ("/home/mydir/logs/access");

Този ред ще премахне създадената по-горе директория, но само ако е празна. И разбира се, ако съръвърът има права за писане в нея. Връща TRUE ако успее и FALSE ако се провали.
-php-

MySQL и PHP

Невъзможно е да си представим модерен и високофункционален Уеб сайт, в основата на който не стои база данни. Множество от функциите, които правят страниците привлекателни не биха могли да съществуват, услуги като онлайн банкиране, пазаруване и дори просто организиране на информацията, са немислими без някакъв вид система за бази данни. Няма да навлизаме в технологични и терминологични подробности, а ще покажем как да използвате напрактика една от най-популярните и разпостранени в Интернет системи за управление на бази данни - MySQL. Повече за самата система можете да откриете в сайта на фирмата - производителка http://www.mysql.com.
Основната версия на системата е безплатна за използване, без значение с комерсиални или идеални цели, като това е една от основните причини за широката й популярност. Това не означава, че възможностите, които предлага са недостатъчни. Системата може да изпълнява заявките на неограничен брой потребители, издържа до 50 милиона записа, предлага лесна за използване система за управление на правата на различните потребители, отлична скорост на обработка на заявките.


MySQL

MySQL е система за управление на релационна база данни (БД), която използва Structured Query Language (SQL) - най-популярният език за добавяне, прочитане и обработка на информация в базите данни днес. Системата е с отворен код и използването й се подчинява на лиценза GPL. Първата версия на MySQL се появи през януари 1998 година. Може да се използва с голяма група програмни езици - C, C++, Eiffel, Java, Perl, PHP, Python и Tcl и има версии за Linux, UNIX и Windows.
Системата за управление на релационна база данни (RDBMS) позволява създаването, администрирането и работата с релациони бази данни. Тези БД представляват съвкупности от информационни единици, организирани формално в таблици. Достъпът и промяната на данните се извършва без да е необходимо реорганизирането на таблиците или каквото и да било друго в БД. Едно от най-важните предимства на релационните БД е лекотата с която се създават, четат и изтриват записите, както и лесната разширяемост.
Спецовете обясняват, че релационната БД се състои от таблици, в които данните са подредени по колони(категории). Всеки ред съдържа уникално смислено съчетание от данни (стойности на колоните). Така таблицата всъщност свързва категориите, тя е "релация" между тях. Данните от различни таблици също могат да са свързани -- така имаме отново релация, но този път между таблиците. По този начин таблиците и връзките между тях спояват данните в едно логическо цяло, и именно то е (релационна) базата данни.. Ако последните няколко изречения не са ви ясни, няма проблеми. За да не ви се смеят "знаещите", трябва само да запомните, че MySQL не е база данни, а система за управление на база данни. И то не на каква да е БД, а на релационна. Толкова с теорията.
За да стане по-ясен текстът от тук нататък, ще кажем, че базата данни се състои от таблици, всяка от които има колони (указващи каква информация трябва да се съхрани там) и редове (представляващи записите). Всяко парче от данните се поставя в полагащото му се сечение между редовете и колоните - т.е. в съответното поле.


Таблиците

За да покажем как се използва MySQL ще направим една примерна и доста упростена директория от линкове. Нещо като dir.bg, където хората отиват, избират си категория и гледат какви линкове е сложил админът вътре. Нашият вариант на директория ще е доста по-простичък, но нищо не пречи след време да се поупражнявате върху него и да направите супер-съвършенна система за класификация на адреси.

Тук няма да обясняваме как се създава потребител за MySQL сървъра, как се определят правата му, как се създават бази данни и т.н. Приемаме, че сте си намерили хостинг, където администраторът се е погрижил да ви даде потребителско име, парола, база данни, както и информация за адреса и порта на MySQL сървъра (обикновено 6667).


За онагледяване на примерите ще използваме пакета phpMyAdmin (
http://www.phpmyadmin.net/), който предоставя Уеб базиран интерфейс към системата. Ще покажем и основните конструкции за изпращане на запитване към БД сървъра.

За да създадем директорията имаме нужда от две таблици - в едната ще съхраняваме категориите, в другата - информацията за сайтовете. Логическата връзка между двете таблици ще се осъществява посредством полета, съдържащи вътрешен идентификатор на категориите, както ще покажем след малко. Като допълнителна възможност - всяка категория ще има възможност да съдържа неопределен брой подкатегории.


Таблицата с категориите ще съдържа три колони - идентификатор на категорията (catid), който ще е число, име на категорията (catname), което ще е низ до 100 знака, без значение дали съдържа букви, цифри и т.н. и идентификатор на родителската категория (catparent).
Основният ключ (primary key) на таблицата ще е полето catid, а имената на категориите няма да могат да се повтарят. Създаваме таблицата така:


CREATE TABLE categories (
catid int(20) NOT NULL auto_increment,
catname varchar(100) NOT NULL,
catparent int(20),
PRIMARY KEY (catid),
UNIQUE CatName (catname)
);



Таблицата със сайтовете ще има общо седем колони - идентификатор на линка (linkid), идентификатор на категорията, в която е класифициран сайта (catid), който е логическата връзка между двете таблици, URL (url) - низ до 255 знака, име на сайта (linkname) - низ до 100 знака, име на добавилия сайта в директорията (izpratil), неговия e-mail адрес (izpratilemail) и дата на добавяне. Основният ключ на таблицата ще е идентификатора на сайта, а за да не стават повторения, URL полето ще трябва да е уникално. Тази таблица създаваме така:


 


CREATE TABLE links (
linkid int(20) NOT NULL auto_increment,
catid int(20) DEFAULT '0' NOT NULL,
url varchar(255) NOT NULL,
linkname varchar(100) NOT NULL,
izpratil varchar(100) NOT NULL,
izpratilemail varchar(100) NOT NULL,
data int(20) DEFAULT '0' NOT NULL,
PRIMARY KEY (linkid),
UNIQUE Url (url)
);


Създаваме таблиците с SQL инструкцията CREATE TABLE име (дефиниране на таблицата). Синтаксисът може да е доста по-сложен, за подробности погледнете документацията на адрес http://www.mysql.com/doc/en/CREATE_TABLE.html. В скобите указваме структурата на бъдещата таблица, като имаме предвид типа на данните, които искаме да съхраняваме в нея. Отделните иснтрукции се разделят със запетайки, но след последната запетайка не се поставя! Няма значение дали оставяте интервал след запетайката или не.

За създаване на таблици можете да използвате phpMyAdmin, за който вече стана дума, но така или иначе трябва да разберете смисъла на основните типове данни, за да постигнете някакъв резултат. Ако се опитате да създадете таблица, съдържаща полета с неправилно описани изисквания за типа информация, ще получите съобщения за грешка. Ако все пак успеете, то проблемите ще се появят на следващ етап, когато таблицата няма да се държи по начина, по който очаквате.



Базата ни данни вече притежава двете таблици, необходими за директорията :
 


Типове данни в MySQL

MySQL предлага поддръжка на различни типове данни, но най-вероятно поне на първо време ще са ви необходими четири или пет от тях. Ето описанията на основните, с "х" в скобите е обозначено число, указващо дължината на записа, а квадратни скоби са показани параметри, които не са задължителни.

CHAR (х) - низове с точно определена дължина. Възможната стойност за х е от 1 до 255. Пример :user_id CHAR(10) - очаква се името на модела да е точно 10 символа.

VARCHAR (х) - низове с максимална дължина х. Отново възможните стойности са между 1 и 255. Пример : user_id VARCHAR(10).

INT (х) [Unsigned] - използва се за указване на цели числа между -2147483648 и 2147483647. Ако се използва Unsigned, тогава валидните числа са между 0 и 4294967295. Пример : user_phone INT.

FLOAT [(M,D)] - указва малко дробно число, като М регулира общия брой цифри, от които може да се състои числото, а D ограничава колко от тях може да са зад десетичната запетая.
Ако числото е с повече цифри след запетаята, се прави закръгляне. Пример : suma FLOAT (4,2) - означава, че ако поставите в това поле числа като 2,31 или 22,56, а също и 1, 34 или 1,2, те ще бъдат съхранени правилно. Но ако се опитате да сложите нещо като 32,567, на практика в полето ще се запише 32,57. Ако искате да сте сигурни, че няма да се получи закръгляне, можете да използвате типа DECIMAL.

DATE - използва се за съхранение на дати, както говори и името. Форматът по подразбиране е "ГГГГ-ММ-ДД", като можете да поставяте стойности от '0000-00-00' до '9999-12-31'. MySQL поддържа множество команди за работа с дати, които няма да обсъждаме тук. Пример : born DATE.

TEXT - служи за съхраняване на по-големи низове - от 255 до 65535 символа. При търсене в низовете, съхранявани в такива полета, MySQL няма да прави разлика между малкии големи букви.

BLOB - също като TEXT, с разликата, че търсенето тук взима предвид малките и големи букви.

SET - по-сложна дефиниция, която може би никога няма да използвате, но е добре да знаете. Може да съдържа до 64 предварително дефинирани стойности, от които могат да се избират една или повече. Например : transport SET ("vlak", "avtobus") NOT NULL - от тук имам четири възможности за избор - нито едно от двете, само едното от тях (влак ИЛИ автобус) или и двете (влак И автобус). Както забелязвате, възможните стойности се задават в момента на създаването на таблицата.

ENUM - също като SET, но е позволено избирането само на една стойност. Ако се върнем на горния пример, тук не можем да изберем варианта влак И автобус.


Още за създаването на таблиците

Както забелязахте, когато създавахме двете таблици за директорията - "categories" и "links", дадохме и други инструкции за структурите им, освен типовете данни на отделните полета. Нека погледнем следните инструкциии :



linkid int(20) NOT NULL auto_increment,
PRIMARY KEY (linkid),
UNIQUE Url (url)


NOT NULL означава, че полето не може да остане празно в нито един от записите в таблицата. Попълването му е задължително, в противен случай ще се появи информация за грешка.

AUTO_INCREMENT означава, че стойността на това поле автоматично ще бъде добавена като към стойността на полето от предходния запис се добави 1. Обикновено при този тип полета посочвате NULL като стойност при добавянето на записа. Използва се често за създаване на уникален идентификатор за отделните записи и може да ви свърши много полезна работа.
PRIMARY KEY (първичен ключ на таблицата) е онова поле, което системата използва за да разграничава различните записи. Не може да има два различни реда с една и съюа тойност на полето, определено за първичен ключ. Всяка таблица има свой PRIMARY KEY.
UNIQUE също ще ви гарантира уникалността на информацията. Например в таблицата с линковете искаме да сме сигурни, че в директорията ни няма да има отправки към един и същ сайт два пъти.

Попълване на таблиците

Продължаваме изграждането на примерната директория с добавяне на записите в таблицата за категориите. Съзнателно пропускам подробностите за работа с MySQL от командния ред и в следващите редове ще продължим да използваме phpMyAdmin за да добавяме, редактираме или премахваме записи. Причините за това са две - показаните в шела на Linux таблици от база данни не са най-конфортния начин да разберете какво се случва в базата данни ако тепърва започвате да се занимавате с това. Освен това има доста потребители, ползващи MySQL под Windows, както и такива, чиито хостинг не позволява SSH достъп до сървъра. Затова усложняването е излишно.


Добавяме категориите

Категориите, в които ще разпределяме линковете в нашата директория, ще се съхраняват в таблицата categories, която вече създадохме.


Тя има следните три полета :
-
catid - число, съставено от до 20 цифри, което ще представлява уникален идентификатор на категорията. Това число ще бъде добавяно автоматично и ще е с една единица по - голямо от числото в предишния запис.
-
catname - низ, който може да е съставен от различни символи с максимална дължина от 100 символа. Тук ще съхраняваме името на категорията.
-
catparent - число, съставено от до 20 цифри, което ще указва идентификационния номер (catid) на директорията, която е родителска на текущата.

Ще създадем категория "Музика", в която ще има три под-категории : "Изпълнители", "Групи", "Компании". В подкатегорията "Изпълнители" ще добавим още две подкатегории - "Жени" и "Мъже", а "Групи" ще разделим на "Български" и "Чужди".

В началото ще създадем трите основни категории. За целта ще използваме командата INSERT с чиято помощ ще вкараме три записа в празната все още таблица.

INSERT INTO таблица VALUES ('първа стойност', 'втора стойност', ...);

Този ред ще създаде нов запис в указаната таблица, попълвайки по реда полетата от ляво надясно - в първото поле ще влезе "първа стойност" и така нататък. Стойностите, които искаме да добавим изписваме винаги в единични кавички. Изключение са само числата, които поставяме в поле с типа на данни INT.

Има два алтернативни записа на показания по-горе код:



INSERT INTO таблица (поле1, поле2) VALUES ('стойност1', 'стойност2');

или

INSERT INTO таблица SET поле1=('стойност1'), поле2=('стойност2');

Както се вижда, двата варианта ви позволяват да създадете запис, без да попълвате всички полета в него. Това обаче може да се направи и с първия вариант. Нека демонстрираме на практика тези редове, като ги използваме за да създадем категориите.

INSERT INTO categories VALUES (NULL, 'Музика', 0);

 

Както можете да видите на долното изображение, вече имаме създадена категория "Музика", която е с идентификационен номер (catid) 1 и родителска категория 0 - тоест, тази категория е от най-високо ниво. Забележете, че използвахме NULL за да укажем, че не искаме да укажем стойност за "catid". Съответно около числото 0, което поставихме в поле, дефинирано като INT, не сложихме единичните кавички.

 

Сега ще добавим трите подкатегории, като вече в "catparent" ще поставяме числото 1, което е идентификор на категорията "Музика". Ще използваме трите различни начина за употреба на INSERT, създавайки трите подкатегории:



INSERT INTO categories VALUES (NULL, 'Изпълнители', 1);
INSERT INTO categories (catname, catparent) VALUES ('Групи', 1);
INSERT INTO categories SET catname=('Компании'), catparent=(1);



 

Сега трябва да създадем подкатегориите към "Групи" и "Компании", указвайки за catparent съответно "2" и "4".



INSERT INTO categories VALUES (NULL, 'Жени', 2);
INSERT INTO categories VALUES (NULL, 'Мъже', 2);
INSERT INTO categories VALUES (NULL, 'Блъгарски', 4);
INSERT INTO categories VALUES (NULL, 'Чужди', 4);


Промяна и изтриване на записи

Промяна на запис

Сигурно забелязвате, че при създаването на категорията "български" сме допуснали правописна грешка. За да я поправим, ще се наложи да променим съдържанието на полето "catname" в записа, в който catid има стойност 7. За целта ще използваме командата UPDATE :



UPDATE categories SET catname='Български' WHERE catid='7';

 

След изпълнението на този ред, грешката ще бъде поправена. Внимавайте с тази конструкция, защото ако пропуснете да посочите условието в WHERE, ще бъде променена стойноста на поелто във всички редове на тази таблица. След малко отново ще се върнем на начините за промяна на вече направени записи.




Изтриване на запис

След като размислим за кратко, можем да решим, че искаме в директорията ни да има само линкове към сайтове за българска музика. Което означава, че ще премахнем категорията за чужди музикални компании. За да направим това ще използваме командата DELETE, за да премахнем този запис в таблицата "categories", където "catid" има стойност 8 :



DELETE FROM categories WHERE catid=8;

Сега ще премахнем и категорията "Български", която вече е излишна :

DELETE FROM categories WHERE catid=7;

В крайна сметка получаваме следния резултат :

Можехме да премахнем двата записа в таблицата само с един ред код, указвайки, че искаме да изтрием редовете, чиито стойности за catid са 7 или (OR) 8 :



DELETE FROM categories WHERE catid=7 OR catid=8 ;



Попълваме директорията

Нека сега добавим по няколко линка във всяка подкатегория на директорията. Сайтовете, които ще използваме в примера са подбрани случайно.



INSERT INTO links VALUES (NULL, 6, 'http://slaviweb.hit.bg', 'Слави Web', 'admin', 'admin@site.com', 0);
INSERT INTO links VALUES (NULL, 5, 'http://milena.hit.bg/', 'Милена', 'admin', 'admin@site.com', 0);
INSERT INTO links VALUES (NULL, 5, 'http://lili.dir.bg/', 'Лили Иванова', 'admin', 'admin@site.com', 0);
INSERT INTO links VALUES (NULL, 6, 'http://valdobrev.hit.bg/', 'Стефан Вълдобрев', 'admin', 'admin@site.com', 0);
INSERT INTO links VALUES (NULL, 3, 'http://www.remapool.com/btr/', 'БТР', 'admin', 'admin@site.com', 0);
INSERT INTO links VALUES (NULL, 3, 'http://wickeda.hit.bg/', 'Уикеда', 'admin', 'admin@site.com', 0);
INSERT INTO links VALUES (NULL, 3, 'http://www.geocities.com/Hollywood/Screen/2009/', 'Нова Генерация', 'admin', 'admin@site.com', 0);
INSERT INTO links VALUES (NULL, 3, 'http://bulgarianspace.com/music/artists/pbb/', 'Подуене Блус Бенд', 'admin', 'admin@site.com', 0);
INSERT INTO links VALUES (NULL, 4, 'http://www.paynermusic.com/', 'Payner Music.com/', 'admin', 'admin@site.com', 0);
INSERT INTO links VALUES (NULL, 4, 'http://www.bol.bg/kamusic/', 'KA Music', 'admin', 'admin@site.com', 0);
INSERT INTO links VALUES (NULL, 4, 'http://bghiphop.hit.bg/producers_sniper.htm', 'Sniper Records', 'admin', 'admin@site.com', 0);


Резултатът виждате на следното изображение :

 



-php-


Каталог: wp-content -> uploads -> 2014
2014 -> Роля на клъстерите за подобряване използването на човешките ресурси в малките и средни предприятия от сектора на информационните технологии
2014 -> Докладна записка от Петър Андреев Киров Кмет на община Елхово
2014 -> Биография: Цироза е траш група от град Монтана. Началото й дават Валери Геров (вокал/китара), Бойко Йорданов и Петър Светлинов (барабани) през 2002година
2014 -> Албум на Първични Счетоводни Документи 01. Фактура
2014 -> Гр. Казанлък Утвърдил
2014 -> 1. Do you live in Madrid? A
2014 -> Брашно – тип „500” седмична справка: средни цени за периода 3 10 септември 2014 Г
2014 -> Права на родителите: Да изискват и получават информация за развитието, възпитанието и здравословното състояние на детето, както и информация за програмите, по които се извършва възпитателно-образователната работа в одз№116


Сподели с приятели:
1   2   3




©obuch.info 2024
отнасят до администрацията

    Начална страница