[ cynique @ 07.11.2006. 15:56 ] @
http://tnx.nl/php?

Čuo sam već dosta priča da je PHP smeće od jezika/platforme (nedostatak formalne gramatike, nema backwards kompatibilnosti u jeziku - upgrade servera i n stotina klijentelskih apps ode u troqrac, loše skalira i sl.), ali ovakva kolekcija bisera "pingvin inženjeringa" na jednom mjestu govori sama za sebe :)
[ Mitrović Srđan @ 07.11.2006. 16:11 ] @
U PERL-u sam radio dugo tj to mi je prvi jezik kog sam naucio a da nije basic ;-)
Oduvek sam ga voleo i koristio iskljucivo za sys administraciju i za neke small appz.
Naravno imao je i svoje mane i jos uvek ima polako ga i zaboravljaju. Ali opet
ne mogu da uporedim jel PHP nisam radio tek cu da pocnem cisto jel mi treba
zbog web dev-a ;-) Buranija jezik ali se bar mlati neka kintica na njemu.
Sad but true. Brzo sklapanje aplikacija i niko i ne vodi racuna o "backwards"
komatibilnosti. Koliko znam samo PHP nazovi kodera koji ne znaju osnovne
pojmove programiranja.
[ vladdy @ 07.11.2006. 16:53 ] @
Zar bi PHP bio tako popularan da je "smece od jezika" ??

ASP i VBScript (??!!?!) je bio 100 puta gori, sa sve IIS 5 auh kad se sjetim. Recordset ... brrrrr.


PHP nije idealan ali je daleko od smeca. Pronasao je svoju upotrebu, nije ni spor a za vece aplikacije, scalability i ostalo postoji JSP, ASP.NET 2.0 i slicne platforme.
[ VRider @ 07.11.2006. 17:20 ] @
Popularan je zato sto neko ko je tek naucio da koristi FP ili DW moze da ubaci malo gotovog koda i da to nesto radi. Kao sto se nekad ubacivao JavaScript, tako sada mozes da ubacis php. I to ne samo da moze da radi nesto, nego moze dosta toga. Ima gomila php "programera", ali, naci kvalitetnog php programera je jako tesko. Desava mi se stalno da me ljudi pitaju imam li nekoga ko radi PHP, i svi nude super uslove samo ako znas da radis. E, sada to sto sam ja ljubitelj perla i sto mi je jos uvek siroko oko sije pa ne moram da ucim php, to je druga stvar...
[ NastyBoy @ 07.11.2006. 18:36 ] @
PHP je obichan hack, shto niko pametan i ne poriche.
Iskreno se nadam se da nestati ASAP. Ono vremena shto sam proveo uz PHP pokushavam da zaboravim (Reflection API? Ko je to budzhio treba biti streljan na terazijama)
[ Mitrović Srđan @ 07.11.2006. 18:51 ] @
@VRIDER
word! :) Mnogo malo rada i pameti a lepo lovice.

[Ovu poruku je menjao blood dana 07.11.2006. u 21:21 GMT+1]
[ Dragi Tata @ 07.11.2006. 21:38 ] @
Perl je dobar kao skript jezik, a loš kao aplikacioni jezik.

PHP nisam nikad ozbiljnije koristio.
[ SashaM @ 07.11.2006. 22:15 ] @
Najveca mana php-a je sto je isuvise tolerantan na pocetnicke greske pa vecina "programera" pravi velike propuste prilikom pravljenja svojih skriptica. Ko je pisao neki web sistem od nule zna koliko php moze biti mocan. OOP se podrazumeva.
Inace web development sam sticajem okolnosti poceo raditi u perl-u i jos uvek me hvata jeza kada se setim! Error handling? Popijes "server error" pa vidi gde si pogresio. Da ne pominjem sta je sve potrebno napisati da bi preuzeo obicanu varijablu iz url-a... Doduse to je bilo pre vise godina kada sam radio u njemu, mozda se nesto promenilo od tada ali u svakom slucaju php je majka za onog ko zna da ga koristi.
[ VRider @ 07.11.2006. 23:09 ] @
Sve sto je potrebno u perlu da bi se pristupilo promenljivoj iz URLa je da joj pristupis?!
Code:

use CGI;
my $query = new CGI;
$zahtev = $query->param('zahtev');

Najbolje je to sto se na potpuno isti nacin pristupa promenljivim i u slucaju POST i GET metode. Ne znam sta moze biti lakse od toga.

Citat:
...php je majka za onog ko zna da ga koristi.

Mislim da ovo vazi i za perl i za bilo koji drugi jezik.
[ SashaM @ 08.11.2006. 00:18 ] @
Citat:
VRider: Sve sto je potrebno u perlu da bi se pristupilo promenljivoj iz URLa je da joj pristupis?!


Ovako je ranije radjeno:

Code:

    if ($ENV{'REQUEST_METHOD'} eq 'GET') {
            $buffer = $ENV{'QUERY_STRING'};
    }    
    else {
            read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
    }

    @pairs = split(/&/, $buffer);
    foreach $pair (@pairs) {
            ($name, $value) = split(/=/, $pair);
            $value =~ tr/+/ /;
            $value =~ tr/|/&/;
        $value =~ tr/^/"/;
            $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
            $FORM{$name} = $value;
    }

    $zahtev = $FORM{'zahtev'};



Kao sto rekoh ne radim u perlu vec godinama tako da je evidentno osmisljen laksi pristup.

Citat:
Najbolje je to sto se na potpuno isti nacin pristupa promenljivim i u slucaju POST i GET metode. Ne znam sta moze biti lakse od toga.


Code:

    $zahtev = $_REQUEST['zahtev'];


Cita varijablu iz get, post i cookies. Mada licno vise preferiram odvojene funkcije za to zbog vece kontrole.

Svako treba da radi u jeziku koji mu najvise odgovara ali to ne znaci da treba omalovazavati druge jezike. Nekome vise lezi perl, nekome php ili asp i svi oni imaju svoju primenu danas. A u cemu ce se sutra programirati to niko ne zna...
[ NastyBoy @ 08.11.2006. 02:03 ] @
Zashto PHP zovete "jezikom"??
[ zi:: @ 08.11.2006. 04:56 ] @
Stvarno ne znam zasto PHP zovu jezikom, a neki MySQL cak pokusavaju da nazovu i bazom ...

[ bojan_bozovic @ 08.11.2006. 05:26 ] @
Jeste los to niko ne spori, ali mu fali i strict typing - zasto ja sa regex moram da proveravam ulaz korisnika (je li numericki npr.)? Zasto da me runtime ne postedi toga gde moze? To je nuzno ako ne zelite busan sajt, to nije opcionalna stvar.

@zi::

Originalni MS BASIC je gori, a ipak je programsi jezik. I asembler takodje. A MySQL jeste baza. Po tvojoj logici samo bi mecku mogli da zovemo autom, a ne Jugo ili Logana, koji se, izvini, lepo kotrljaju.
[ zi:: @ 08.11.2006. 05:55 ] @
Ja sam to rekao ironicno.

Koristim PHP za Web programiranje, dobro mi sluzi. Doduse, stoje one primedbe sa sajta koje je Cinique postavio.

Perl koristim za sitne skripte za data mining, i za takve stvari kao sto su mailing liste, slanje SMSova, itd. Za ovakve stvari koristim Perl vise od 10 godina, i zadovoljan sam s njim.


[ bojan_bozovic @ 08.11.2006. 06:02 ] @
izvini, bez smajlija ironija se ne vidi na forumima. :-)
[ maksvel @ 08.11.2006. 07:02 ] @
Uprkos svojim nedostacima, puno se koristi, a i nastaju neka poboljšanja... -> evo i MS se "dodatno angažovao": Microsoft Opens PHP Door
[ bojan_bozovic @ 08.11.2006. 09:30 ] @
Hype nema veze sa kvalitetom. Webdeveloperi moraju da koriste ono sto se trazi, jer retko kada imaju odresene ruke da biraju server-side jezik i bazu koja im odgovara, zato Perl, Ruby, Python a i Postgresql nisu zastupljeniji. Ja bih voleo da koristim Postgresql ili koju komercijalnu bazu u Express varijanti, ali to moj host ne omogucava, a ja skuplje da placam hosting necu. PHP je jedan Frankenstajn, normalno se sw prvo dizajnira pa onda kodira, a kod PHP-a se vidi nedostatak rada na dizajnu jezika. Ili ce izbaciti kompatibilnost sa starim kodom i napraviti nesto (neznatno) bolje, ili ce uvek ostati ono sto jeste. S obzirom sta su napravili do sada od jezika, sumnjam da je njihov krajnji domet visoko.
[ SashaM @ 08.11.2006. 09:54 ] @
Citat:
bojan_bozovic: Jeste los to niko ne spori, ali mu fali i strict typing - zasto ja sa regex moram da proveravam ulaz korisnika (je li numericki npr.)? Zasto da me runtime ne postedi toga gde moze? To je nuzno ako ne zelite busan sajt, to nije opcionalna stvar.


A zasto proveravas sa regexom? Ako ocekujes numericki input mozes jednostavno postaviti

Code:
$broj=(int)$_POST['broj'];


Znaci (int) ispred ulaza i php ce automatski varijablu preneti kao broj cak i u slucaju da je uneta kao string. Na primer "aa1" ce biti 0, "14aa" ce biti 14 itd.
Stoji da svaki input treba tretirati kao nesiguran i vrsiti provere ali nisam znao da to neki rade sa regexom. Sa druge strane mislim da provere treba ciniti u svakom web programskom jeziku.

PHP uopste nije los jezik, istina je da ima jos dosta prostora za unapredjivanje ali i ovakav kakav je sasvim dobro obavlja svoj posao. Naravno od programera zavisi kako ce ga upotrebiti, za tupsona ni najsavrseniji jezik nece biti dovoljno dobar i spreciti ga da proizvodi bagovito smece.

[Ovu poruku je menjao SashaM dana 08.11.2006. u 11:05 GMT+1]
[ bojan_bozovic @ 08.11.2006. 10:04 ] @
Zato sto ne zelim da mi 4aa bude 4 ili 1.0 1.

Ako mislis da 4aa nije string a 1.0 nije float, sorry.

Code:

function isinteger($str) {
if (ereg ('^[0-9]*$', $str)) {
    $return=TRUE;
} else {
    $return=FALSE;
}
return $return;
}


To sto nesto "obavlja posao" ne znaci da je to dobro. Eto BASICa na primer, obavlja posao, ali je los, vrlo los.
[ SashaM @ 08.11.2006. 10:13 ] @
I sta radis ukoliko input ne prodje validaciju? Izbacis natpis sa greskom? Onaj ko hoce da ti zeza program zezace ga svakako, ti jedino kao programer mozes da predupredis code injection preko input polja.

Zar u tom slucaju ne bi bilo jednostavnije proveravati sa "is_int" i "is_float" funkcijama?
[ bojan_bozovic @ 08.11.2006. 10:24 ] @
?id=1a treba biti isto sto i ?id=1 kazes? Sta sam time postigao, osim sto napisah losiji kod? BTW ako ko napravi gresku u kucanju i napise url sa ?id=1a imam duplu stranicu u pretrazivacu automatski, a to je lose za SEO. Kada vec moram testirati za SQL injection, zasto ne obavim to kako treba, nego da otaljam?
[ SashaM @ 08.11.2006. 10:36 ] @
?id=1 nikada ne moze ispasti ?id=1a osim ako korisnik namerno ne izmeni vrednost u url-u posto program generise linkove a ne korisnik. Samim tim ocekujes da je to brojcana vrednost i tako je tretiras, greske u radu programa su moguce jedino ako je vrednost namerno izmenjena a to se moze desiti uvek. Dzaba ti da proveravas da li je vrednost numericka ako korisnik upise id=123234, znaci validacije je prosla ali dolazi do greske u izvrsavanju jer u bazi ne postoji id sa tim brojem.

Inace "ctype_digit" funkcija radi identicnu stvar kao ona koju si postavio.
[ bojan_bozovic @ 08.11.2006. 10:46 ] @
Cekaj, URL moze i da se kuca. Ne mozes da racunas na best-case scenario koriscenja tvog sw, ako je online pa ga svako moze koristiti. Ako ne verujes mozes probati i bez escape-ovanja pre kverija. :-) Vidis, worst case scenariji moraju biti pokriveni.

Lepo, kazes da tvoj sajt mogu da spamujem duplikatima, URL ovi tipa ?id=1,?id=1a,?id=1aaaab itd. Konkurent ti napravi milion identicnih stranica u Google indexu i moze i ban da sledi :-)
[ SashaM @ 08.11.2006. 10:58 ] @
Url moze da se kuca kao sto moze i da se prepravlja, upravo zato postoje provere inputa. Primer koji sam ti naveo pokriva worst case scenario jer sprecava code injection a sve se vrti oko toga.

Eh, ako cemo tako i tvoj sajt i bilo ciji drugi moze da se spamuje duplikatima...
Primer: tvoja stranica je www.mojsajt.com/index.php?id=1 i sve je super, ali sta ako ja uradim ovo?
www.mojsajt.com/index.php?id=1&foo=asda
www.mojsajt.com/index.php?id=1&foo=sdgfde4
www.mojsajt.com/index.php?id=1&foo=33asdd itd

Znaci tvoj sajt proverava da li je id numericka vrednost i sve je lepo & krasno medjutim ja ubacujem jos neku bezazlenu varijablu koju tvoja skripta ne ocekuje i samim tim ne proverava. Link je uvek drugaciji a sadzaj isti i eto ti milion identicnih stranica...
[ bojan_bozovic @ 08.11.2006. 11:00 ] @
Thx. Ukazao si mi na bug. Mislim da nece moci da se u PHP-u to resi na tradicionalan nacin ($_GET, $_REQUEST), vec mora da se parsira $_SERVER["QUERY_STRING"].

Jos jedan razlog zasto je PHP los.

[ SashaM @ 08.11.2006. 11:23 ] @
Zapravo moze da se resi posto je $_GET array.

Znaci ukoliko ocekujes da tvoj program ima samo id kao ulazni parametar uradis nesto ovako (prost primer):
Code:

if (sizeof($_GET)>1) die ('greska: extra url parametar');


Kod proverava da li postoji vise od jedne url varijable. Tu se jos moze dodati provera da li je varijabla koja se unosi bas 'id' i tako dalje...

Inace to nije do php-a, isti fazon mozes primeniti na bilo kom web jeziku jer se ta provera jako slabo koristi.
[ bojan_bozovic @ 08.11.2006. 11:34 ] @
Ok. Parser je desetak linija koda BTW.
[ Dragi Tata @ 08.11.2006. 13:13 ] @
Citat:
zi:: a neki MySQL cak pokusavaju da nazovu i bazom ...


Vala i ako se šališ ;)

Doduše, ne bazom (baza - kolekcija podataka) nego DBMS-om (programom za upravljanje baza), ali je MySQL dobar samo za izbegavanje.
[ dr ZiDoo @ 10.11.2006. 19:27 ] @
Da... ima ovde interesantnih stvari kao:
"Ja nikada nisam koristio PHP"..."ali to je sucks, Perl je cool"

E sada se svako normalan zapita gdje sada Perl a gdje PHP. Da se razumjemo PHP je programski jezik koji je napravljen iskljucivo za WEB PROGRAMIRANJE. Perl je uopste skripni jezik.
Drugo, zapitajte se zasto ljudi ulazu u njega toliko novca. Zasto je toliko popularan. Zasto velike kompanije koriste PHP? Zasto MS pravi dilove sa Zendom?


E sada da se osvrnem malo na sigurnost tog jezika.

Code:

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
  char buffer[10];
  if (argc < 2)
  {
    fprintf(stderr, "USAGE: %s string\n", argv[0]);
    return 1;
  }
  strcpy(buffer, argv[1]);
  return 0;
}


Ako ste dovoljno retardirani da iskompajlirate ovakav program onda ste dovoljno retardirani da napisete i sledecu PHP skriptu:

Code:

<?php
unlink($_GET['ime_fajla_za_obrisati_sa_diska']);
?>

Moj savjet je da apache pokrenete sa administratorskim permisijama.
PHP je za svog postojanja imo mozda nekih propusta (bi cini mi se verzija 4.0.4).

Da se vratimo na uopsteno o PHPu.

Posto je PHP jezik koji je orjentisan na samo jednu oblast onda sve pametni C/ASM/C++/Java samoprozvani gurui pljuju po PHPu, jadno. PHP je super radi posao za koji je namjenjen. U njemu se mogu napraviti jaaaaaako velike web aplikacije koji opet mogu da rade sa jako puno razlicitih baza podataka. Pri tome PHP daje sasvim pristojne performanse. Druga jako pozitivna stvar kod PHPa su extenzije koje mozete pisati u Cu, tako da ako vam se projekat iznenada prosiri na nesto nevidjeno uvjek mozete platiti C programera da vam napise modul za komunikaciju servera i aparata za kafu (i za komunikaciju da koristi COM1). I kao slag na kavu iz tog aparata sve to moze bez da cim apache/iis ili sam php moze ga lodati direktno u php fajl.

Moj savjet svim iole normalnim ljudima da ak krenu raditi web aplikaciju probaju to sa PHPom prvo. Ako vec duze rade u .NET-u nek koriste MS ASPX ali to je tesko odrzavati.
[ maksvel @ 10.11.2006. 19:42 ] @
Ok, doco, slažem se sa većinom tvog posta, jedino mi nije jasno zašto je tako teško održavati aspx?
[ degojs @ 10.11.2006. 20:40 ] @
Citat:
Ako vec duze rade u .NET-u nek koriste MS ASPX ali to je tesko odrzavati.


ASPX :) Teško održavati :)


Citat:
Da... ima ovde interesantnih stvari kao:
"Ja nikada nisam koristio PHP"..."ali to je sucks, Perl je cool"


Odnosno, hteo si da kažeš: "Ja nikad nisam koristio (ASP).NET, ali to je teško održavati."
[ dr ZiDoo @ 10.11.2006. 23:46 ] @
Moram uskratiti degojs pravo da se prestavlja kao ja, lose mu ide ja sam puno pametniji :)

Zato sto ASPX (kao jezik namjenjen WEB programiranju) ne podrzava nikakve templait systeme (ne podrzava ni PHP ali tu je 3rd Smarty). Odrzavanje cistog coda je kod .NET-a je mozda i lakse ali kada govorimo o web programiranju vecina odrzavanje se svodi na promjene u HTML codu, dodavanje JS/CSS coda. Ako ne koristite samrty to sve i ide do nekog odredjenog perioda, ali kada naraste ... uzas.

Takodje aspx vodi dodati neke svoje tagove (input hidden najradje) i onda kad to das dizajneru on se "uzbudi" :)
[ degojs @ 11.11.2006. 00:02 ] @
LOL

Nismo li ti već pre jedno godinu, možda i dve, već objasnili da ASP.NET (što, usput, nije nikakav jezik, a ASPX još manje ;) radi baš na principu šablona? A tek kad je u pitanju verzija 2.0, stvari su još bolje (Master page, itd).

Ne znaš o čemu pričaš, pa bi bolje bilo da ne lupaš, al' dobro.. :)
[ dr ZiDoo @ 11.11.2006. 00:21 ] @
Aj pogledaj Smarty degojs matere't a mojne sam lupat.
[ degojs @ 11.11.2006. 00:26 ] @
Uopšte ne komentartišem ni PHP ni Smarty, niti sporim da to radi, itd.

Ali ovo što pričaš za ASP.NET je obična glupost.. Kako rekoh, već ti je pre neko drugi objašnjavao stvar sa ASP.NET-om i šablonima, a sad, što ti i dalje lupaš, tvoj problem.

Moj jedini savet bi bio da ako ikad dođeš u priliku da apliciraš za neki posao vezan za ASP.NET - da paziš šta ćeš da kažeš :)