Vývoj PHP v roce 2006
Sara Golemon shrnula vývoj kódu PHP v roce 2006 a já přináším krátké shrnutí tohoto shrnutí:
- Rozšíření Hash se dostalo do základních rozšíření a dokonce je ve výchozím stavu automaticky zapnuto. Uspěla i rozšíření JSON a Filter.
- Počítadlo referencí v PHP 4 zůstalo 16bitové.
- Do PHP 6 si po dlouhé diskusi našel cestu příkaz goto.
- Z PHP 6 zmizely direktivy safe_mode, register_globals a magic_quotes_*.
- Do PHP se nedostala direktiva
#line
ani vlastnosti tříd určené pouze pro čtení.
- Volání neexistujících funkcí a metod už nevyvolá fatální chybu, ale novou E_RECOVERABLE_ERROR.
- Direktiva unicode.semantics nepůjde nastavit v
.htaccess
ale pouze v php.ini
nebo httpd.conf
.
- Direktivu open_basedir lze při běhu skriptu zpřísnit.
- Navržená podpora taint režimu se do PHP pravděpodobně nedostane.
- Úprava funkcí pro podporu Unicode překročila hranici 50 %.
Diskuse
Messa:
Nebude safe_mode? Jak bude vyřešena otázka bezpečnosti (při přístupu k souborům apod.)?
29.12.2006 13:59:39
Lepší ochranu poskytuje open_basedir.
29.12.2006 14:03:44
open_basedir poskytuje *jinou* ochranu, než safe mode.
3.1.2007 19:27:21
Ondrej Ivanic:
Ano inu, inteligentnesiu. safe_mode bola nocna mora. Jediny chybajuci rozdiel (pre mna) je to ze mozno by bolo mat vhodne nieco ako exec_basedir...
5.1.2007 13:35:51
jirka:
Výše uvádíte: "Direktivu open_basedir lze při běhu skriptu zpřísnit". Funkce ini_set() mi vrací původní nastavení. Mohl by jste mi, prosím, poradit?
13.2.2007 17:06:35
Tato funkčnost je k dispozici až v PHP 6.
13.2.2007 17:20:30
Jan Tichý:
V kostce lehce nadneseně shrnuto, direktiva safe_mode nebude potřeba, protože většina nastavení bude v PHP 6 v defaultní nezměnitelné podobě ve své přísné podobě, takže PHP 6 se bude vždy chovat tak, jako by safe_mode bylo zapnuté, ovšem s důrazem na správné využití open_basedir.
29.12.2006 21:34:15
> Z PHP 6 zmizely direktivy ... magic_quotes_*.
To bude mít docela zdrcující dopad na tento blog, že? :-))
29.12.2006 15:56:50
Pouze vyměním informaci v patičce za filter.default=magic_quotes.
29.12.2006 16:13:14
Rýpu si, rýpu.
Není Jakube už načase se na magic_quotes skutečně vykašlat? V příkladech místo query("SELECT ... WHERE X = '$_GET[x]'") začít psát query("SELECT ... WHERE X = '$x'") atd... Mohl bys pak parametry ošetřovat pomocí strlen(), substr(), používat PDO, ... A hlavně: dalo by se s parametry dělat i něco trošku jiného, než je jen a pouze vkládat do SQL příkazu.
29.12.2006 18:17:48
Na
<?php $x = mysql_real_escape_string($_GET["x"]); mysql_query("SELECT '$x'"); ?> přecházet nehodlám. Na vázání proměnných v podání PDO časem přejdu, ale asi ne na tomto blogu. Předělávat všechny příklady se mi nechce a mít je nekonzistentní taky ne.
29.12.2006 18:25:27
rezna:
hmm ja nevim, vy pisete v PHP dlouuuuuho a za tu dobu jste si nenapsal rozumne funkce/tridy pro praci s SQL? :) - IMHO je zakladem rozumne psaneho projektu aspon fukce a la
DO_Query("SELECT * FROM table WHERE column = '@x@', array('x' => 'neco'))
minimalne toto zarucuje rozumne skladani SQLka, jeho prehlednost a hlavne jednotnou kontrolu nad vstupem
30.1.2007 03:56:05
Ano, vázání proměnných je dobrý koncept. Ale spíš než doma-upečené řešení mám raději nějaké standardní. Proto se mi líbí PDO.
30.1.2007 11:10:42
rezna:
ja tohle psal uz pred PDO inspirovan tim co maji v .NETu - co jsem neresil je jeste typovani - to by tam byt melo - v .NETu lze elegantne tahle kontrolovat na parametrech i typy, pripadne si vynutit prevod
1.2.2007 00:57:05
uzivatel:
Odporucam zabrusit do databazovej vrstvy frameworkov CodeIgniter alebo CakePHP, PDO sa dlho dobu v jednoduchosti urcite nechyti.
5.2.2007 12:26:07
Všechny příklady jsem předělal a blog nyní předpokládá vypnuté magic_quotes_gpc.
11.5.2009 06:31:33
Gratuluji!
11.5.2009 07:45:01
Super! Kolik času ti to vzalo?
11.5.2009 16:46:47
Celkem 90 minut. Na to, že jsem se k tomu rozhoupával asi dva roky, to je docela málo :-).
12.5.2009 03:52:50
L.:
Kdo proboha potřebuje goto??? A k čemu?
3.1.2007 16:13:32
Rozumně se dá použít např. k ošetřování chyb.
3.1.2007 16:16:58
Sam vis ze PHP je jazyk kde se vetsina lidi uci programovat. Podle toho nektere scripty jsou tak hruzostrasne. GOTO zavede takove nove konvece ze se vtom nikdo nevyzna. To jsou moje vzpominky na Pascal a GOTO peklo.
3.1.2007 16:34:14
Štěpán Svoboda:
JO!
Pod to bych se podepsal :)
Příklad:
<?php
class User
{
private
$Id,
$Name,
$Email;
public function getId()
{
return $this->Id;
}
public function setId($Id)
{
$this->Id = $Id;
}
public function getName()
{
return $this->Name;
}
public function setName($Name)
{
$this->Name = $Name;
}
public function getEmail()
{
return $this->Email;
}
public function setEmail($Email)
{
$this->Email = $Email;
}
public function import($source = 'Row', $data = false)
{
switch ($source) {
case 'Row': {
if (!$data) {
if (!$this->getId()) {
throw new Exception('User::import() - Cannot import: no data, unknown Id');
}
else {
$conn = Connector::get();
$data = $conn->fetchRow("SELECT * FROM".tableUser." WHERE Id = {$this->getId()}");
}
}
$messages = array();
try {
label%begin;
if (!array_key_exists('Id', $messages)) {
$this->setId(validate::Id($data['Id']));
}
if (!array_key_exists('Name', $messages)) {
$this->setName(validate::Name($data['Name']));
}
if (!array_key_exists('Email', $messages)) {
$this->setEmail(validate::$data['Email']);
}
}
catch (Exception $e) {
$messages['Id'] = $e->getMessage();
goto %begin;
}
}
}
$this->setId();
}
}
?>
3.1.2007 19:07:28
Štěpán Svoboda:
:)
místo toho co je v příkladu má být:
<?php
catch (Exception $e) {
$messages[$e->getProperty()] = $e->getMessage();
goto %begin;
}
?>
museli bychom mít nadefinovanou nějakou jinou třídu vyjímek ale to už nesouvisí s problémem...
3.1.2007 19:14:37
Tohle se dá vyřešit pomocí
<?php
while (true) {
try {
} catch (Exception $e) {
continue;
}
break;
}
?>
3.1.2007 19:15:53
Štěpán Svoboda:
Tohle mne nenapadlo. Abych se přiznal tak s whilem nejsem moc dobrej kamarád :) Asi pzůstatek z Pascalu, který zde již někdo zmínil.
To error414: Prasácky se dá programovat s goto i bez něj...
3.1.2007 20:31:37
rezna:
GOTO je silenost - a uz vubec ne k osetrovani chyb - k tomu je konstrukce try{}catch{} a cykly
jak je videt vyvojari jsou celkem mimo - radsi kdyby tam cpali rozumny veci
30.1.2007 03:54:00
Vývojáři jsou možná z tvého pohledu mimo, ale třeba psaní parseru s důrazem na výkon je s konstrukcí goto mnohem elegantnější a try-catch v tom nijak nepomůže.
Nicméně souhlasím, že se goto bude častěji spíše zneužívat, proto je jeho funkčnost také značně omezena.
30.1.2007 11:05:46
Honca:
Chci se zeptat, jestli je někde možný (nebo bude možný) sehnat zdrojový kódy standardních funkcí v PHP...
22.1.2007 04:15:36