Zbirka savjeta i činjenica o optimizaciji PHP skripti. Izoštravanje vaših vještina sa cURL-om Nekoliko riječi o drugim korisnim cURL opcijama

Kako pravilno pretraživati ​​koristeći google.com

Vjerovatno svi znaju kako se ovo koristi pretraživač, kao Google =) Ali ne znaju svi da ako pravilno sastavite upit za pretraživanje koristeći posebne konstrukcije, možete postići rezultate onoga što tražite mnogo efikasnije i brže =) U ovom članku pokušat ću pokazati šta i kako morate da uradite kako biste ispravno pretraživali

Google podržava nekoliko naprednih operatora pretraživanja koji imaju posebno značenje prilikom pretraživanja na google.com. Tipično, ovi operateri mijenjaju pretragu ili čak govore Googleu da to uradi u potpunosti razne vrste traži. Na primjer, dizajn link: je poseban operater, a zahtjev link:www.google.com neće vam dati normalnu pretragu, već će umjesto toga pronaći sve web stranice koje imaju veze na google.com.
alternativni tipovi zahtjeva

keš memorija: Ako u svoj upit uključite druge riječi, Google će istaknuti te riječi unutar keširanog dokumenta.
na primjer, cache: www.web stranicaće prikazati keširani sadržaj sa istaknutom riječju "web".

link: Upit za pretragu iznad će prikazati web stranice koje sadrže veze do navedenog upita.
na primjer: link:www.siteće prikazati sve stranice koje imaju link na http://www.site

povezano: Prikazuje web stranice koje su "povezane" sa navedenom web stranicom.
na primjer, povezano: www.google.comće navesti web stranice koje su slične početna stranica Google.

info: Informacije o upitu: predstavit će neke od informacija koje Google ima o web stranici koju tražite.
na primjer, info:websiteće pokazati informacije o našem forumu =) (Armada - Forum za odrasle webmastere).

Ostali zahtjevi za informacijama

definirati: Upit define: će pružiti definiciju riječi koje unesete nakon njega, prikupljene iz različitih izvora na mreži. Definicija će biti za cijelu unesenu frazu (to jest, uključit će sve riječi u tačnom upitu).

dionice: Ako započnete upit s dionicama: Google će obraditi ostatak upita kao simbole dionica i povezati se na stranicu koja prikazuje gotove informacije za ove simbole.
na primjer, dionice: Intel yahooće prikazati informacije o Intelu i Yahoou. (Imajte na umu da biste trebali upisati simbole za najnovije vijesti, a ne naziv kompanije)

Modifikatori upita

stranica: Ako u svoj upit uključite site:, Google će ograničiti rezultate na one web stranice koje pronađe u toj domeni.
Također možete pretraživati ​​po pojedinačnim zonama, kao što su ru, org, com, itd ( site:com site:ru)

allintitle: Ako pokrenete upit sa allintitle:, Google će ograničiti rezultate na sve riječi upita u naslovu.
na primjer, allintitle: google pretraga će vratiti sve Google stranice pretraživanjem kao što su slike, blog, itd

naslov: Ako u svoj upit uključite intitle:, Google će ograničiti rezultate na dokumente koji sadrže tu riječ u naslovu.
na primjer, naslov: Posao

allinurl: Ako pokrenete upit sa allinurl: Google će ograničiti rezultate na sve riječi upita u URL-u.
na primjer, allinurl: google pretragaće vratiti dokumente sa google i pretražiti u naslovu. Također, kao opciju, možete razdvojiti riječi kosom crtom (/) tada će riječi s obje strane kose crte biti pretraživane na istoj stranici: Primjer allinurl: foo/bar

inurl: Ako u svoj upit uključite inurl:, Google će ograničiti rezultate na dokumente koji sadrže tu riječ u URL-u.
na primjer, Animacija inurl:site

tekst: pretražuje samo navedenu riječ u tekstu stranice, zanemarujući naslov i tekstove linkova i druge stvari koje nisu povezane sa ovim modifikatorom -. allintext: one. dalje, sve riječi u upitu će se pretraživati ​​samo u tekstu, što također može biti važno, zanemarujući često korištene riječi u linkovima
na primjer, intext:forum

raspon datuma: pretraživanja u vremenskom okviru (datumski raspon:2452389-2452389), datumi za vremena su naznačeni u julijanskom formatu.

Pa, i razne druge stvari zanimljivi primjeri zahtjevi

Primjeri pisanja upita za Google. Za spamere

Inurl:control.guest?a=sign

Site:books.dreambook.com “URL početne stranice” “Potpiši moj” inurl:sign

Sajt: www.freegb.net Početna stranica

Inurl:sign.asp “Broj znakova”

“Poruka:” inurl:sign.cfm “Pošiljalac:”

Inurl:register.php “Registracija korisnika” “Website”

Inurl:edu/knjiga gostiju “Upišite se u knjigu gostiju”

Inurl:objavite “Objavite komentar” “URL”

Inurl:/archives/ “Komentari:” “Sjećate se informacija?”

“Skriptu i knjigu gostiju Kreirao:” “URL:” “Komentari:”

Inurl:?action=add “phpBook” “URL”

Naslov: "Pošalji novu priču"

Časopisi

Inurl:www.livejournal.com/users/ mode=reply

Inurl greatestjournal.com/ mode=reply

Inurl:fastbb.ru/re.pl?

Inurl:fastbb.ru /re.pl? "Knjiga gostiju"

Blogovi

Inurl:blogger.com/comment.g?”postID””anonymous”

Inurl:typepad.com/ “Objavite komentar” “Zapamtite lične podatke?”

Inurl:greatestjournal.com/community/ “Objavi komentar” “adrese anonimnih postera”

“Ostavite komentar” “adrese anonimnih postera” -

Naslov: "Objavi komentar"

Inurl:pirillo.com “Objavi komentar”

Forumi

Inurl:gate.html?”name=Forumi” “mode=reply”

Inurl:”forum/posting.php?mode=reply”

Inurl:"mes.php?"

Inurl:”members.html”

Inurl:forum/memberlist.php?”

cURL je poseban alat koji je dizajniran za prijenos datoteka i podataka koristeći URL sintaksu. Ova tehnologija podržava mnoge protokole kao što su HTTP, FTP, TELNET i mnoge druge. cURL je prvobitno dizajniran da bude alat komandna linija. Na našu sreću, cURL biblioteku podržava jezik PHP programiranje. U ovom članku ćemo pogledati neke od naprednih karakteristika cURL-a, a također ćemo ih pokriti praktična primjena stečeno znanje koristeći PHP.

Zašto cURL?

U stvari, ima ih mnogo alternativnim načinima uzorci sadržaja web stranica. U mnogim slučajevima, uglavnom zbog lijenosti, koristio sam jednostavan PHP funkcije umjesto cURL:

$content = file_get_contents("http://www.nettuts.com"); // ili $lines = file("http://www.nettuts.com"); // ili readfile("http://www.nettuts.com");

Međutim, ove funkcije nemaju praktički nikakvu fleksibilnost i sadrže ogroman broj nedostataka u pogledu rukovanja greškama itd. Osim toga, postoje određeni zadaci koje jednostavno ne možete postići sa ovim standardnim funkcijama: interakcija s kolačićima, autentifikacija, podnošenje obrasca, prijenos datoteka itd.

cURL je moćna biblioteka koja podržava mnogo različitih protokola, opcija i pruža detaljne informacije o URL zahtjevima.

Osnovna struktura

  • Inicijalizacija
  • Dodjela parametara
  • Izvršenje i dohvaćanje rezultata
  • Oslobađanje memorije

// 1. inicijalizacija $ch = curl_init(); // 2. specificirati parametre, uključujući url curl_setopt($ch, CURLOPT_URL, "http://www.nettuts.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); // 3. dobiti HTML kao rezultat $output = curl_exec($ch); // 4. zatvoriti vezu curl_close($ch);

Korak #2 (tj. pozivanje curl_setopt()) će biti razmatran mnogo više u ovom članku nego o svim ostalim koracima, jer U ovoj fazi se dešavaju sve najzanimljivije i najkorisnije stvari koje trebate znati. U cURL-u postoji ogroman broj različitih opcija koje se moraju specificirati da bi se URL zahtjev mogao konfigurirati na najpažljiviji način. Nećemo razmatrati cijelu listu, već ćemo se fokusirati samo na ono što smatram potrebnim i korisnim za ovu lekciju. Sve ostalo možete sami proučiti ako vas ova tema zanima.

Provjera greške

Osim toga, također možete koristiti uslovne izjave za provjeru uspješnosti operacije:

// ... $output = curl_exec($ch); if ($output === FALSE) ( echo "cURL Greška: " . curl_error($ch); ) // ...

Ovdje vas molim da primijetite jednu vrlo važnu stvar: moramo koristiti “=== false” za poređenje, umjesto “== false”. Za one koji nisu upoznati, ovo će nam pomoći da razlikujemo prazan rezultat i logičku vrijednost false, što će ukazivati ​​na grešku.

Dobijanje informacija

Drugi dodatni korak je pribavljanje podataka o cURL zahtjevu nakon što je on izvršen.

// ... curl_exec($ch); $info = curl_getinfo($ch); echo "Uzeo". $info["total_time"] . "sekunde za url". $info["url"]; //…

Vraćeni niz sadrži sljedeće informacije:

  • "url"
  • "content_type"
  • "http_code"
  • “header_size”
  • “request_size”
  • "filetime"
  • “ssl_verify_result”
  • “redirect_count”
  • “ukupno_vrijeme”
  • “namelookup_time”
  • “connect_time”
  • “pretransfer_time”
  • “size_upload”
  • “size_download”
  • “speed_download”
  • “speed_upload”
  • “download_content_length”
  • “upload_content_length”
  • “starttransfer_time”
  • “redirect_time”

Detekcija preusmeravanja u zavisnosti od pretraživača

U ovom prvom primjeru, napisat ćemo kod koji može otkriti URL preusmjeravanja na osnovu različitih postavki pretraživača. Na primjer, neke web stranice preusmjeravaju preglednike mobilni telefon, ili bilo koji drugi uređaj.

Koristit ćemo opciju CURLOPT_HTTPHEADER da definiramo naša odlazna HTTP zaglavlja, uključujući ime korisnika u pretraživaču i dostupne jezike. Na kraju ćemo moći odrediti koje nas web lokacije preusmjeravaju na različite URL-ove.

// testirati URL $urls = array("http://www.cnn.com", "http://www.mozilla.com", "http://www.facebook.com"); // testiranje pretraživača $browsers = array("standard" => array ("user_agent" => "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5) .6 (.NET CLR 3.5.30729)", "language" => "en-us,en;q=0.5"), "iphone" => niz ("user_agent" => "Mozilla/5.0 (iPhone; U CPU poput Mac OS X en) AppleWebKit/420+ (KHTML, kao Gecko) Verzija/3.0 Mobile/1A537a Safari/419.3", "jezik" => "en"), "francuski" => niz ("user_agent"; => "Mozilla/4.0 (kompatibilan; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)", "language" => "fr,fr-FR;q=0.5")); foreach ($urls kao $url) ( echo "URL: $url\n"; foreach ($preglednici kao $test_name => $browser) ( $ch = curl_init(); // specificirajte url curl_setopt($ch, CURLOPT_URL , $url // specificirajte zaglavlja za pretraživač curl_setopt($ch, CURLOPT_HTTPHEADER, array("User-Agent: ($browser["user_agent"])", "Prihvati-Jezik: ($browser["language"]); )" )); // ne treba nam sadržaj stranice curl_setopt($ch, CURLOPT_NOBODY, 1); // trebamo dobiti HTTP zaglavlja curl_setopt($ch, CURLOPT_HEADER, 1); // vraća rezultate umjesto izlaza curl_setopt($ch, CURLOPT_RETURNTRANSFER, $output = curl_close($ch) da li je bilo HTTP preusmjeravanja("!Location: (.*)!"); , $matches) ( echo " $test_name: preusmjerava na $matches\n"; ) else ( echo "$test_name: nema preusmjeravanja\n"; ) ) echo "\n\n";

Prvo navodimo listu URL-ova web lokacija koje ćemo provjeriti. Tačnije, potrebne su nam adrese ovih lokacija. Zatim moramo definirati postavke pretraživača za testiranje svakog od ovih URL-ova. Nakon toga ćemo koristiti petlju u kojoj ćemo proći kroz sve dobijene rezultate.

Trik koji koristimo u ovom primjeru za postavljanje cURL postavki će nam omogućiti da dobijemo ne sadržaj stranice, već samo HTTP zaglavlja (pohranjena u $output). Zatim, koristeći jednostavan regex, možemo utvrditi da li je string “Location:” bio prisutan u primljenim zaglavljima.

Kad trčiš ovaj kod, trebali biste dobiti nešto poput sljedećeg rezultata:

Kreiranje POST zahtjeva za određeni URL

Prilikom formiranja GET zahtjev Preneseni podaci se mogu proslijediti na URL putem „stringa upita“. Na primjer, kada pretražujete Google, pojam za pretraživanje se postavlja u adresnu traku novog URL-a:

Http://www.google.com/search?q=ruseller

U cilju simulacije ovaj zahtjev, ne morate koristiti cURL objekte. Ako vas lijenost potpuno savlada, koristite funkciju “file_get_contents()” da dobijete rezultat.

Ali stvar je u tome što neki HTML obrasci šalju POST zahtjeve. Podaci ovih obrazaca se prenose kroz tijelo HTTP zahtjeva, a ne kao u prethodnom slučaju. Na primjer, ako ste popunili obrazac na forumu i kliknuli na dugme za pretragu, tada će najvjerovatnije biti poslat POST zahtjev:

Http://codeigniter.com/forums/do_search/

Možemo pisati PHP skripta, koji može simulirati ovu vrstu URL-a zahtjeva. Prvo napravimo jednostavnu datoteku za prihvatanje i prikaz POST podaci. Nazovimo ga post_output.php:

Print_r($_POST);

Zatim kreiramo PHP skriptu da napravimo cURL zahtjev:

$url = "http://localhost/post_output.php"; $post_data = niz ("foo" => "bar", "query" => "Nettuts", "action" => "Pošalji"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // označava da imamo POST zahtjev curl_setopt($ch, CURLOPT_POST, 1); // dodaj varijable curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $output = curl_exec($ch); curl_close($ch); echo $output;

Kada pokrenete ovu skriptu trebalo bi da dobijete ovakav rezultat:

Dakle, POST zahtjev je poslan skripti post_output.php, koja zauzvrat izlazi superglobalni niz$_POST, čiji smo sadržaj dobili pomoću cURL-a.

Učitavanje fajla

Prvo, napravimo datoteku kako bismo je generirali i poslali u datoteku upload_output.php:

Print_r($_FILES);

A evo i koda skripte koji izvodi gornju funkcionalnost:

$url = "http://localhost/upload_output.php"; $post_data = niz ("foo" => "bar", // fajl za upload "upload" => "@C:/wamp/www/test.zip"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $output = curl_exec($ch); curl_close($ch); echo $output;

Kada želite da otpremite fajl, sve što treba da uradite je da ga prosledite kao normalnu promenljivu posta, kojoj prethodi simbol @. Kada pokrenete napisanu skriptu, dobit ćete sljedeći rezultat:

Višestruki cURL

Jedan od najvecih snage cURL je mogućnost kreiranja "više" cURL rukovalaca. Ovo vam omogućava da istovremeno i asinhrono otvorite vezu na više URL-ova.

U klasičnoj verziji cURL zahtjeva, izvršenje skripte je obustavljeno i čeka se završetak URL operacije zahtjeva, nakon čega skripta može nastaviti. Ako namjeravate komunicirati s cijelom gomilom URL-ova, to će dovesti do prilično značajnog ulaganja vremena, jer u klasičnoj verziji možete raditi samo s jednim URL-om odjednom. Međutim, ovu situaciju možemo ispraviti korištenjem posebnih rukovatelja.

Pogledajmo primjer koda koji sam uzeo sa php.net:

// kreiramo nekoliko cURL resursa $ch1 = curl_init(); $ch2 = curl_init(); // specificira URL i druge parametre curl_setopt($ch1, CURLOPT_URL, "http://lxr.php.net/"); curl_setopt($ch1, CURLOPT_HEADER, 0); curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/"); curl_setopt($ch2, CURLOPT_HEADER, 0); //kreirajte višestruki cURL rukovalac $mh = curl_multi_init(); //dodavanje nekoliko rukovaoca curl_multi_add_handle($mh,$ch1); curl_multi_add_handle($mh,$ch2); $active = null; //izvrši do ( $mrc ​​= curl_multi_exec($mh, $active); ) while ($mrc == CURLM_CALL_MULTI_PERFORM); while ($active && $mrc ​​== CURLM_OK) ( if (curl_multi_select($mh) != -1) ( uradi ( $mrc ​​= curl_multi_exec($mh, $active); ) while ($mrc == CURLM_CALL_MULTI_PERFORM ) ) //zatvaranje curl_multi_remove_handle($mh, $ch1); curl_multi_remove_handle($mh, $ch2); curl_multi_close($mh);

Ideja je da možete koristiti više cURL rukovalaca. Koristeći jednostavnu petlju, možete pratiti koji zahtjevi još nisu dovršeni.

U ovom primjeru postoje dvije glavne petlje. Prvo uradi-while petlja poziva funkciju curl_multi_exec(). Ova funkcija se ne može blokirati. Radi najbrže što može i vraća status zahtjeva. Sve dok je vraćena vrijednost konstanta 'CURLM_CALL_MULTI_PERFORM', to znači da posao još nije završen (na primjer, u trenutno slanje je u toku http zaglavlja u URL-u); Zato nastavljamo provjeravati ovu povratnu vrijednost dok ne dobijemo drugačiji rezultat.

U sljedećoj petlji provjeravamo uvjet dok je varijabla $active = "true". To je drugi parametar funkcije curl_multi_exec(). Vrijednost ove varijable će biti jednaka "true" do bilo kojeg od postojeće promjene je aktivan. Zatim pozivamo funkciju curl_multi_select(). Njegovo izvođenje je "blokirano" dok postoji barem jedna aktivna veza, sve dok se ne dobije odgovor. Kada se to dogodi, vraćamo se u glavnu petlju kako bismo nastavili s izvršavanjem upita.

Sada primijenimo ovo znanje na primjer koji će biti zaista koristan velikom broju ljudi.

Provjera veza u WordPress-u

Zamislite blog sa ogromnim brojem postova i poruka, od kojih svaka sadrži linkove na vanjske internetske resurse. Neki od ovih linkova možda su već mrtvi iz različitih razloga. Stranica je možda izbrisana ili stranica možda uopće ne radi.

Napravit ćemo skriptu koja će analizirati sve linkove i pronaći web stranice koje se ne učitavaju i 404 stranice, a zatim nam dostaviti detaljan izvještaj.

Odmah da kažem da ovo nije primjer kreiranja dodatka za WordPress. Ovo je apsolutno dobar poligon za naše testove.

Hajde da konačno počnemo. Prvo moramo preuzeti sve linkove iz baze podataka:

// konfiguracija $db_host = "localhost"; $db_user = "root"; $db_pass = ""; $db_name = "wordpress"; $excluded_domains = array("localhost", "www.mydomain.com"); $max_connections = 10; // inicijalizacija varijabli $url_list = array(); $working_urls = array(); $dead_urls = niz(); $not_found_urls = niz(); $active = null; // povezivanje na MySQL if (!mysql_connect($db_host, $db_user, $db_pass)) ( die("Ne mogu se povezati: " . mysql_error()); ) if (!mysql_select_db($db_name)) ( die("Može not select db: " . mysql_error()); ) // izaberi sve objavljene postove sa linkovima $q = "IZABIR post_content IZ wp_posts GDJE post_content KAO "%href=%" I post_status = "objavi" I post_type = "post "" ; $r = mysql_query($q) ili die(mysql_error()); while ($d = mysql_fetch_assoc($r)) ( // dohvati veze koristeći regularni izrazi if (preg_match_all("!href=\"(.*?)\"!", $d["post_content"], $matches)) ( foreach ($podudara se kao $url) ( $tmp = parse_url($url) if (in_array($tmp["host"], $excluded_domains)) (nastavi; ) $url_list = $url ) ) // ukloni duplikate $url_list = array_values($url_list)); if (!$url_list) ( die("Nema URL za provjeru"); )

Prvo generišemo konfiguracione podatke za interakciju sa bazom podataka, zatim pišemo listu domena koji neće učestvovati u proveri ($excluded_domains). Također definiramo broj koji karakterizira broj maksimalnih istovremenih veza koje ćemo koristiti u našoj skripti ($max_connections). Zatim se pridružujemo bazi podataka, biramo postove koji sadrže linkove i akumuliramo ih u niz ($url_list).

Sljedeći kod je malo komplikovan, pa ga prođite od početka do kraja:

// 1. višestruki rukovalac $mh = curl_multi_init(); // 2. dodati skup URL-ova za ($i = 0; $i< $max_connections; $i++) { add_url_to_multi_handle($mh, $url_list); } // 3. инициализация выполнения do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); // 4. основной цикл while ($active && $mrc == CURLM_OK) { // 5. если всё прошло успешно if (curl_multi_select($mh) != -1) { // 6. делаем дело do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); // 7. если есть инфа? if ($mhinfo = curl_multi_info_read($mh)) { // это значит, что запрос завершился // 8. извлекаем инфу $chinfo = curl_getinfo($mhinfo["handle"]); // 9. мёртвая ссылка? if (!$chinfo["http_code"]) { $dead_urls = $chinfo["url"]; // 10. 404? } else if ($chinfo["http_code"] == 404) { $not_found_urls = $chinfo["url"]; // 11. рабочая } else { $working_urls = $chinfo["url"]; } // 12. чистим за собой curl_multi_remove_handle($mh, $mhinfo["handle"]); // в случае зацикливания, закомментируйте данный вызов curl_close($mhinfo["handle"]); // 13. добавляем новый url и продолжаем работу if (add_url_to_multi_handle($mh, $url_list)) { do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); } } } } // 14. завершение curl_multi_close($mh); echo "==Dead URLs==\n"; echo implode("\n",$dead_urls) . "\n\n"; echo "==404 URLs==\n"; echo implode("\n",$not_found_urls) . "\n\n"; echo "==Working URLs==\n"; echo implode("\n",$working_urls); function add_url_to_multi_handle($mh, $url_list) { static $index = 0; // если у нас есть ещё url, которые нужно достать if ($url_list[$index]) { // новый curl обработчик $ch = curl_init(); // указываем url curl_setopt($ch, CURLOPT_URL, $url_list[$index]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_NOBODY, 1); curl_multi_add_handle($mh, $ch); // переходим на следующий url $index++; return true; } else { // добавление новых URL завершено return false; } }

Ovdje ću pokušati sve detaljno objasniti. Brojevi na listi odgovaraju brojevima u komentaru.

  1. 1. Kreirajte višestruki rukovalac;
  2. 2. Napisat ćemo funkciju add_url_to_multi_handle() malo kasnije. Svaki put kada se pozove, počinje obrada novog URL-a. U početku dodajemo 10 ($max_connections) URL-ova;
  3. 3. Za početak, moramo pokrenuti funkciju curl_multi_exec(). Sve dok vraća CURLM_CALL_MULTI_PERFORM, još uvijek imamo nešto da radimo. Ovo nam je potrebno uglavnom za stvaranje veza;
  4. 4. Zatim dolazi glavna petlja, koja će raditi sve dok imamo barem jednu aktivnu vezu;
  5. 5. curl_multi_select() visi čekajući da se URL pretraga završi;
  6. 6. Još jednom, moramo natjerati cURL da obavi neki posao, odnosno dohvati podatke povratnog odgovora;
  7. 7. Informacije su ovdje provjerene. Kao rezultat izvršavanja zahtjeva, niz će biti vraćen;
  8. 8. Vraćeni niz sadrži cURL rukovalac. Koristićemo ga za odabir informacija o zasebnom cURL zahtjevu;
  9. 9. Ako je veza mrtva ili je skripta istekla, onda ne bismo trebali tražiti nikakav http kod;
  10. 10. Ako nam je link vratio stranicu 404, onda će http kod sadržavati vrijednost 404;
  11. 11. Inače, pred nama je radna karika. (Možete dodati dodatne provjere za kod greške 500, itd...);
  12. 12. Zatim uklanjamo cURL rukovalac jer nam više nije potreban;
  13. 13. Sada možemo dodati još jedan url i pokrenuti sve o čemu smo prije pričali;
  14. 14. U ovom koraku, skripta završava svoj rad. Možemo ukloniti sve što nam nije potrebno i napraviti izvještaj;
  15. 15. Konačno ćemo napisati funkciju koja će dodati url rukovatelju. Statička varijabla $index će se povećavati svaki put kada se ova funkcija pozove.

Koristio sam ovu skriptu na svom blogu (sa nekim neispravnim linkovima koje sam dodao namjerno da je testiram) i dobio sam sljedeći rezultat:

U mom slučaju, skripti je trebalo nešto manje od 2 sekunde da pređe kroz 40 URL-ova. Povećanje performansi je značajno kada se radi sa još više URL-ova. Ako otvorite deset veza u isto vrijeme, skripta se može izvršiti deset puta brže.

Nekoliko riječi o drugim korisnim cURL opcijama

HTTP autentifikacija

Ako je uključeno URL adresa Ako imate HTTP autentifikaciju, lako možete koristiti sljedeću skriptu:

$url = "http://www.somesite.com/members/"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // specificiramo korisničko ime i lozinku curl_setopt($ch, CURLOPT_USERPWD, "myusername:mypassword"); // ako je preusmjeravanje dozvoljeno curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // zatim spremamo naše podatke u cURL curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1); $output = curl_exec($ch); curl_close($ch);

FTP upload

PHP takođe ima biblioteku za rad sa FTP-om, ali ništa vas ne sprečava da ovde koristite cURL alate:

// otvorite datoteku $file = fopen("/path/to/file", "r"); // url bi trebao sadržavati sljedeći sadržaj $url = "ftp://username: [email protected]:21/path/to/new/file"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_UPLOAD, 1); curl_setopt($ch, CURLOPT_INFILE, $fp($ch, CURLOPT_INFILESIZE, filesize("/path/to/file")); curl_close($ch);

Korištenje proxyja

Svoj URL zahtjev možete izvršiti putem proxyja:

$ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://www.example.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // odredimo adresu curl_setopt($ch, CURLOPT_PROXY, "11.11.11.11:8080"); // ako trebate dati korisničko ime i lozinku curl_setopt($ch, CURLOPT_PROXYUSERPWD,"user:pass"); $output = curl_exec($ch); curl_close($ch);

Funkcije povratnog poziva

Također je moguće odrediti funkciju koja će se pokrenuti čak i prije nego što cURL zahtjev završi. Na primjer, dok se sadržaj odgovora učitava, možete početi koristiti podatke bez čekanja da se potpuno učitaju.

$ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://net.tutsplus.com"); curl_setopt($ch, CURLOPT_WRITEFUNCTION,"progress_function"); curl_exec($ch); curl_close($ch); funkcija progress_function($ch,$str) ( echo $str; vrati strlen($str); )

Funkcija poput ove MORA vratiti dužinu stringa, što je uslov.

Zaključak

Danas smo naučili kako možete koristiti cURL biblioteku za svoje sebične svrhe. Nadam se da ste uživali u ovom članku.

Hvala vam! ugodan dan!

I tako, sada ću vam reći kako da hakujete nešto bez nekog posebnog znanja. Odmah ću reći da je malo koristi od ovoga, ali ipak.
Prvo morate pronaći same stranice. Da biste to učinili, idite na google.com i potražite dorks

Inurl:pageid= inurl:games.php?id= inurl:page.php?file= inurl:newsDetail.php?id= inurl:gallery.php?id= inurl:article.php?id= inurl:show.php? id= inurl:staff_id= inurl:newsitem.php?num= inurl:readnews.php?id= inurl:top10.php?cat= inurl:historialeer.php?num= inurl:reagir.php?num= inurl:Stray- Questions-View.php?num= inurl:forum_bds.php?num= inurl:game.php?id= inurl:view_product.php?id= inurl:newsone.php?id= inurl:sw_comment.php?id= inurl: news.php?id= inurl:avd_start.php?avd= inurl:event.php?id= inurl:product-item.php?id= inurl:sql.php?id= inurl:news_view.php?id= inurl: select_biblio.php?id= inurl:humor.php?id= inurl:aboutbook.php?id= inurl:ogl_inet.php?ogl_id= inurl:fiche_spectacle.php?id= inurl:communique_detail.php?id= inurl:sem. php3?id= inurl:kategorie.php4?id= inurl:news.php?id= inurl:index.php?id= inurl:faq2.php?id= inurl:show_an.php?id= inurl:preview.php? id= inurl:loadpsb.php?id= inurl:opinions.php?id= inurl:spr.php?id= inurl:pages.php?id= inurl:announce.php?id= inurl:clanek.php4?id= inurl:participant.php?id= inurl:download.php?id= inurl:main.php?id= inurl:review.php?id= inurl:chappies.php?id= inurl:read.php?id= inurl: prod_detail.php?id= inurl:viewphoto.php?id= inurl:article.php?id= inurl:person.php?id= inurl:productinfo.php?id= inurl:showimg.php?id= inurl:view. php?id= inurl:website.php?id= inurl:hosting_info.php?id= inurl:gallery.php?id= inurl:rub.php?idr= inurl:view_faq.php?id= inurl:artikelinfo.php? id= inurl:detail.php?ID= inurl:index.php?= inurl:profile_view.php?id= inurl:category.php?id= inurl:publications.php?id= inurl:fellows.php?id= inurl :downloads_info.php?id= inurl:prod_info.php?id= inurl:shop.php?do=part&id= inurl:productinfo.php?id= inurl:collectionitem.php?id= inurl:band_info.php?id= inurl :product.php?id= inurl:releases.php?id= inurl:ray.php?id= inurl:produit.php?id= inurl:pop.php?id= inurl:shopping.php?id= inurl:productdetail .php?id= inurl:post.php?id= inurl:viewshowdetail.php?id= inurl:clubpage.php?id= inurl:memberInfo.php?id= inurl:section.php?id= inurl:theme.php ?id= inurl:page.php?id= inurl:shredder-categories.php?id= inurl:tradeCategory.php?id= inurl:product_ranges_view.php?ID= inurl:shop_category.php?id= inurl:transcript.php ?id= inurl:channel_id= inurl:item_id= inurl:newsid= inurl:trainers.php?id= inurl:news-full.php?id= inurl:news_display.php?getid= inurl:index2.php?option= inurl :readnews.php?id= inurl:top10.php?cat= inurl:newsone.php?id= inurl:event.php?id= inurl:product-item.php?id= inurl:sql.php?id= inurl :aboutbook.php?id= inurl:preview.php?id= inurl:loadpsb.php?id= inurl:pages.php?id= inurl:material.php?id= inurl:clanek.php4?id= inurl:announce .php?id= inurl:chappies.php?id= inurl:read.php?id= inurl:viewapp.php?id= inurl:viewphoto.php?id= inurl:rub.php?idr= inurl:galeri_info.php ?l= inurl:review.php?id= inurl:iniziativa.php?in= inurl:curriculum.php?id= inurl:labels.php?id= inurl:story.php?id= inurl:look.php? ID= inurl:newsone.php?id= inurl:aboutbook.php?id= inurl:material.php?id= inurl:opinions.php?id= inurl:announce.php?id= inurl:rub.php?idr= inurl:galeri_info.php?l= inurl:tekst.php?idt= inurl:newscat.php?id= inurl:newsticker_info.php?idn= inurl:rubrika.php?idr= inurl:rubp.php?idr= inurl: offer.php?idf= inurl:art.php?idm= inurl:title.php?id= inurl:".php?id=1" inurl:".php?cat=1" inurl:".php?catid= 1" inurl:".php?num=1" inurl:".php?bid=1" inurl:".php?pid=1" inurl:".php?nid=1"

evo male liste. Možete koristiti svoje. I tako, pronašli smo sajt. Na primjer http://www.vestitambov.ru/
Zatim preuzmite ovaj program

**Skriveni sadržaj: Da biste vidjeli ovaj skriveni sadržaj, vaš broj objava mora biti 3 ili veći.**

Kliknite OK. Zatim ubacujemo mjesto žrtve.
Pritisnemo start. Zatim čekamo rezultate.
I tako, program je pronašao SQL ranjivost.

Zatim preuzmite Havij, http://www.vestitambov.ru:80/index.php?module=group_programs&id_gp= tamo zalijepite primljenu vezu. Neću objašnjavati kako koristiti Havij i gdje ga preuzeti nije teško. Sve. Dobili ste podatke koji su vam potrebni - administratorsku lozinku, a onda je na vašoj mašti.

P.S. Ovo je moj prvi pokušaj da nešto napišem. Izvinite ako nešto nije u redu

Ovaj članak je odavno trebao biti prepisan (previše "štedenja na šibicama"), ali nikad nisam stigao do toga. Neka to odmeri i podseti nas koliko smo glupi u mladosti.
Jedan od glavnih kriterija uspjeha bilo kojeg internetskog resursa je brzina njegovog rada, a iz godine u godinu korisnici postaju sve zahtjevniji u pogledu ovog kriterija. Optimizacija rada PHP skripti je jedan od metoda za osiguranje brzine sistema.
U ovom članku želio bih javnosti predstaviti svoju kolekciju savjeta i činjenica o optimizaciji skripti. Zbirku mi je trebalo dosta vremena da sastavim i bazira se na nekoliko izvora i ličnih eksperimenata.
Zašto zbirka savjeta i činjenica, a ne stroga pravila? Jer, kao što sam vidio, ne postoji „apsolutno ispravna optimizacija“. Mnoge tehnike i pravila su kontradiktorna i nemoguće ih je sve pratiti. Morate odabrati skup metoda koje su prihvatljive za korištenje bez ugrožavanja sigurnosti i pogodnosti. Zauzeo sam preporučljiv stav i stoga imam savjete i činjenice koje možete, ali ne morate slijediti.
Da ne bude zabune, podijelio sam sve savjete i činjenice u 3 grupe:

  • Optimizacija koda
  • Beskorisna optimizacija
Grupe su označene uslovno i neke stavke se mogu pripisati nekoliko njih odjednom. Brojevi su za prosječan server (LAMP). U članku se ne razmatraju pitanja koja se odnose na efikasnost različitih tehnologija i okvira trećih strana, jer je to tema za zasebne rasprave.

Optimizacija na nivou logike i organizacije aplikacije

Mnogi savjeti i činjenice u vezi sa ovom grupom za optimizaciju su vrlo značajni i pružaju vrlo veliki dobitak u vremenu.
  • Stalno profilirajte svoj kod na serveru (xdebug) i klijentu (firebug) kako biste identificirali uska grla koda
    Treba napomenuti da je potrebno profilirati i serverski i klijentski dio, jer se sve greške servera ne mogu otkriti na samom serveru.
  • Broj korisničkih funkcija koje se koriste u programu ni na koji način ne utječe na brzinu
    Ovo omogućava programu da koristi bezbroj prilagođenih funkcija.
  • Aktivno koristite prilagođene funkcije
    Pozitivan učinak postiže se činjenicom da se operacije unutar funkcija izvode samo s lokalnim varijablama. Učinak ovoga je veći od cijene poziva prilagođenih funkcija.
  • Preporučljivo je implementirati "kritično teške" funkcije u programskom jeziku treće strane u obliku PHP ekstenzije
    Za to su potrebne vještine programiranja na jeziku treće strane, što značajno povećava vrijeme razvoja, ali u isto vrijeme omogućava korištenje tehnika koje prevazilaze mogućnosti PHP-a.
  • Obrada statične html datoteke je brža od interpretirane php datoteke
    Razlika u vremenu na klijentu može biti oko 1 sekunda, tako da ima smisla jasno odvojiti statične stranice od stranica koje generiraju PHP alati.
  • Veličina obrađene (povezane) datoteke utječe na brzinu
    Približno 0,001 sekunda se troši na obradu svaka 2 KB. Ova činjenica nas tjera da minimiziramo kod skripte kada ga prenosimo na proizvodni server.
  • Pokušajte ne koristiti require_once ili include_once cijelo vrijeme
    Ove funkcije treba koristiti kada je moguće ponovo pročitati datoteku, u drugim slučajevima preporučljivo je koristiti require i include .
  • Prilikom grananja algoritma, ako postoje konstrukcije koje se možda neće obraditi i njihov volumen je oko 4 KB ili više, tada je optimalnije uključiti ih pomoću uključivanja.
  • Preporučljivo je koristiti provjeru poslanih podataka na klijentu
    To je zbog činjenice da se prilikom provjere podataka na strani klijenta broj zahtjeva s netočnim podacima naglo smanjuje. Sistemi za validaciju podataka na strani klijenta su izgrađeni prvenstveno koristeći JS i krute elemente forme (odaberite).
  • Preporučljivo je izgraditi velike DOM strukture za nizove podataka na klijentu
    Ovo je veoma efikasan metod optimizacija pri radu sa ekranom veliki volumen podaci. Njegova suština se svodi na sledeće: niz podataka se priprema na serveru i prenosi do klijenta, a konstrukcija DOM struktura se obezbeđuje JS funkcijama. Kao rezultat toga, opterećenje se djelimično preraspoređuje sa servera na klijenta.
  • Sistemi izgrađeni na AJAX tehnologiji su znatno brži od sistema koji ne koriste ovu tehnologiju
    To je uzrokovano smanjenjem izlaznog volumena i preraspodjelom opterećenja na klijenta. U praksi je brzina sistema sa AJAX-om 2-3 puta veća. komentar: AJAX, zauzvrat, stvara niz ograničenja za korištenje drugih metoda optimizacije, na primjer, rad sa baferom.
  • Kada primite zahtjev za objavu, uvijek vratite nešto, možda čak i razmak
    U suprotnom, klijentu će biti poslana stranica o grešci koja teži nekoliko kilobajta. Ova greška vrlo čest u sistemima koji koriste AJAX tehnologiju.
  • Dohvaćanje podataka iz datoteke je brže nego iz baze podataka
    To je uglavnom zbog cijene povezivanja s bazom podataka. Na moje iznenađenje, ogroman postotak programera manijakalno pohranjuje sve podatke u bazu podataka, čak i kada je korištenje datoteka brže i praktičnije. komentar: Možete pohraniti podatke u datoteke koje se ne pretražuju u suprotnom, trebali biste koristiti bazu podataka.
  • Nemojte se povezivati ​​na bazu podataka osim ako je potrebno
    Iz meni nepoznatog razloga, mnogi programeri se povezuju na bazu podataka u fazi čitanja postavki, iako kasnije možda neće postavljati upite bazi podataka. Ovo je loša navika koja u prosjeku košta 0,002 sekunde.
  • Koristite trajnu vezu s bazom podataka kada postoji mali broj istovremeno aktivnih klijenata
    Vremenska korist je zbog nedostatka troškova za povezivanje sa bazom podataka. Vremenska razlika je otprilike 0,002 sekunde. komentar: at velike količine Nije preporučljivo da korisnici koriste trajne veze. Kada radite s trajnim vezama, mora postojati mehanizam za prekid veza.
  • Korištenje složenih upita baze podataka je brže od korištenja nekoliko jednostavnih
    Vremenska razlika zavisi od mnogih faktora (volumen podataka, podešavanja baze podataka, itd.) i meri se u hiljaditim, a ponekad čak i stotim delovima sekunde.
  • Korištenje kalkulacija na strani DBMS-a je brže od kalkulacija na strani PHP-a za podatke pohranjene u bazi podataka
    To je zbog činjenice da ovakvi proračuni na strani PHP-a zahtijevaju dva upita bazi podataka (prijem i promjena podataka). Vremenska razlika ovisi o mnogim faktorima (volumen podataka, postavke baze podataka, itd.) i mjeri se u hiljaditim i stotim dijelovima sekunde.
  • Ako se uzorci podataka iz baze podataka rijetko mijenjaju i mnogi korisnici pristupaju tim podacima, onda ima smisla spremiti uzorak podataka u datoteku
    Na primjer, možete koristiti sljedeći jednostavan pristup: uzimamo uzorke podataka iz baze podataka i spremamo ih kao serijalizirani niz u datoteku, a zatim bilo koji korisnik koristi podatke iz datoteke. U praksi, ovaj metod optimizacije može pružiti višestruko povećanje brzine izvršavanja skripte. komentar: Prilikom upotrebe ovu metodu potrebno je pisati alate za generiranje i promjenu podataka u pohranjenim datotekama.
  • Keširajte podatke koji se rijetko mijenjaju s memcached-om
    Dobitak u vremenu može biti prilično značajan. komentar: Keširanje je efikasno za statičke podatke, efekat je smanjen i može biti negativan.
  • Rad bez objekata (bez OOP-a) je oko tri puta brži od rada sa objektima
    Također se troši više memorije. Nažalost, PHP interpreter ne može raditi sa OOP-om tako brzo kao sa redovnim funkcijama.
  • Što je veća dimenzija niza, oni rade sporije
    Gubitak vremena nastaje zbog rukovanja ugniježđenim strukturama.

Optimizacija koda

Ovi savjeti i činjenice daju beznačajno povećanje brzine u odnosu na prethodnu grupu, ali zajedno ove tehnike mogu dati dobar dobitak u vremenu.
  • echo i print su znatno brži od printf
    Vremenska razlika može dostići nekoliko hiljaditih delova sekunde. To je zato što se printf koristi za izlaz formatiranih podataka i tumač provjerava cijeli red za takve podatke. printf se koristi samo za izlaz podataka kojima je potrebno formatiranje.
  • echo $var."text" je brži od echo "$var text"
    To je zato što je PHP motor u drugom slučaju primoran da traži varijable unutar stringa. Za velike količine podataka i stare PHP verzije uočljive su razlike tokom vremena.
  • echo "a" je brži od echo "a" za nizove bez varijabli
    To je zato što u drugom slučaju PHP motor pokušava pronaći varijable. Za velike količine podataka, razlike u vremenu su prilično uočljive.
  • eho "a","b" je brži od eho "a"."b"
    Izlaz podataka odvojenih zarezom je brži nego tačkom. To je zato što u drugom slučaju dolazi do konkatenacije nizova. Za velike količine podataka, razlike u vremenu su prilično uočljive. Napomena: ovo radi samo sa funkcijom echo, koja može uzeti više redova kao argumente.
  • $return="a"; $return.="b"; echo $return; brže od eha "a"; eho "b";
    Razlog je taj što izlaz podataka zahtijeva neke dodatne operacije. Za velike količine podataka, razlike u vremenu su prilično uočljive.
  • ob_start(); eho "a"; eho "b"; ob_end_flush(); brže od $return="a"; $return.="b"; echo $return;
    To je zato što se sav posao obavlja bez pristupa varijablama. Za velike količine podataka, razlike u vremenu su prilično uočljive. komentar: Ova tehnika je neefikasna ako radite sa AJAX-om, jer je u ovom slučaju poželjno vratiti podatke kao jedan niz.
  • Koristite "profesionalni umetak" ili?> a b
    Statički podaci (vanjski kod) se obrađuju brže od izlaza PHP podaci. Ova tehnika se naziva profesionalno umetanje. Za velike količine podataka, razlike u vremenu su prilično uočljive.
  • readfile je brži od file_get_contents, file_get_contents je brži od zahtjeva, a require je brži od uključivanja za izlaz statičkog sadržaja iz jedne datoteke
    Vrijeme potrebno za čitanje prazne datoteke varira od 0,001 za readfile do 0,002 za include .
  • require je brži od uključivanja za interpretirane datoteke
    komentar: pri grananju algoritma, kada je moguće ne koristiti interpretiranu datoteku, morate koristiti include , jer Zahtev uvek uključuje fajl.
  • if (...) (...) else if (...) () je brži od prekidača
    Vrijeme ovisi o broju grana.
  • if (...) (...) else if (...) () je brži od if (...) (...); ako (...) ();
    Vrijeme zavisi od broja grana i uslova. Trebali biste koristiti else ako je moguće, jer je to najbrža "uslovna" konstrukcija.
  • Najčešći uslovi konstrukcije if (...) (...) else if (...) () treba postaviti na početak grane
    Tumač skenira konstrukciju od vrha do dna dok ne nađe da je uslov zadovoljen. Ako tumač utvrdi da je uslov ispunjen, onda ne gleda na ostatak konstrukcije.
  • < x; ++$i) {...} быстрее, чем for($i = 0; $i < sizeOf($array); ++$i) {...}
    To je zato što će u drugom slučaju operacija sizeOf biti izvršena na svakoj iteraciji. Vremenska razlika izvršenja zavisi od broja elemenata niza.
  • x = sizeOf($array); for($i = 0; $i< x; ++$i) {...} быстрее, чем foreach($arr as $value) {...} для не ассоциативных массивов
    Vremenska razlika je značajna i povećava se kako se niz povećava.
  • preg_replace je brži od ereg_replace, str_replace je brži od preg_replace, ali strtr je brži od str_replace
    Vremenska razlika zavisi od količine podataka i može doseći nekoliko hiljaditih delova sekunde.
  • String funkcije su brže od regularnih izraza
    Ovo pravilo je posljedica prethodnog.
  • Uklonite varijable niza koje više nisu potrebne za oslobađanje memorije.
  • Izbjegavajte korištenje potiskivanja grešaka @
    Suzbijanje grešaka proizvodi niz vrlo sporih operacija, a budući da stopa ponovnih pokušaja može biti vrlo visoka, gubitak brzine može biti značajan.
  • if (isset($str(5))) (...) je brži od if (strlen($str)>4)(...)
    To je zato što se standardna isset test operacija koristi umjesto strlen funkcije za manipulaciju stringovima.
  • 0,5 je brže od 1/2
    Razlog je što se u drugom slučaju vrši operacija dijeljenja.
  • return je brži od globalnog kada vraća vrijednost varijable iz funkcije
    To je zato što se u drugom slučaju kreira globalna varijabla.
  • $row["id"] je brži od $row
    Prva opcija je 7 puta brža.
  • $_SERVER['REQUEST_TIME'] je brži od vremena() za određivanje kada se skripta treba pokrenuti
  • if ($var===null) (...) je brži od if (is_null($var)) (...)
    Razlog je taj što u prvom slučaju nema upotrebe funkcije.
  • ++i je brži od i++, --ja brže, nego ja--
    Ovo je uzrokovano karakteristikama PHP jezgra. Vremenska razlika je manja od 0,000001, ali ako ponovite ove procedure hiljade puta, onda bolje pogledajte ovu optimizaciju.
  • Povećanje inicijalizirane varijable i=0; ++i; brži od neinicijaliziranog ++i
    Vremenska razlika je oko 0,000001 sekunde, ali zbog moguće učestalosti ponavljanja ovu činjenicu treba imati na umu.
  • Upotreba povučenih varijabli je brža od deklariranja novih
    Ili da preformulišem drugačije: ne stvarajte nepotrebne varijable.
  • Rad s lokalnim varijablama je otprilike 2 puta brži nego s globalnim
    Iako je vremenska razlika manja od 0,000001 sekunde, ali zbog visoke frekvencije ponavljanja, trebali biste pokušati raditi s lokalnim varijablama.
  • Direktan pristup varijabli je brži od pozivanja funkcije unutar koje je ova varijabla definirana nekoliko puta
    Pozivanje funkcije traje oko tri puta više vremena nego pozivanje varijable.

Beskorisna optimizacija

Brojne metode optimizacije nemaju nikakvog efekta u praksi veliki uticaj na brzinu izvršavanja skripte (dobitak vremena manji od 0,000001 sekunde). Uprkos tome, takva optimizacija je često predmet kontroverzi. Iznio sam ove „beskorisne“ činjenice da im ne obraćate posebnu pažnju prilikom pisanja koda u budućnosti.
  • echo je brži od printa
  • include("apsolutni put") je brži od include("relativni put")
  • sizeOf je brži od brojanja
  • foreach ($arr kao $key => $value) (...) je brži od resetovanja ($arr); while (list($key, $value) = every ($arr)) (...) za asocijativne nizove
  • Nekomentirani kod je brži od komentiranog koda jer odlazi dodatno vrijeme da pročitate fajl
    Jako je glupo smanjivati ​​obim komentara radi optimizacije, samo treba izvršiti minimizaciju u radnim (“borbenim”) skriptama.
  • Varijable s kratkim imenima su brže od varijabli s dugim imenima
    Ovo je uzrokovano smanjenjem količine koda koji se obrađuje. Slično kao u prethodnoj tački, samo trebate izvršiti minimizaciju u radnim („borbenim“) skriptama.
  • Označavanje koda pomoću tabulatora je brže od korištenja razmaka
    Slično prethodnoj tački.
Na kraju, još jednom bih vas podsjetio da savjeti i činjenice koje sam dao nisu apsolutni i da značaj njihove primjene zavisi od konkretne situacije. Treba imati na umu da je optimizacija skripte samo mali dio cjelokupne procedure optimizacije i često je moguće mirno živjeti bez gore navedenih savjeta.

Za pisanje ovog članka djelomično su korišteni materijali.