php tippek

PHP komment csiki-csuki

Most láttam egy jópofa megoldást, amit meg kell osztanom.

PHP forráskód barkácsolás közben gyakran előfordul, hogy egy nagyobb kódrészletet, egy teljes blokkot "ki kell kommentezni", azaz megjegyzésbe tesszük, hogy ne fusson le. Majd később visszatesszük a forráskódba, majd megint kivesszük, és így tovább jó sokszor.
Persze lehet használni ezt:

<?php
/*
  $foo = 'bar';
*/
?>

De két külön sorban van, két helyen kell kivenni-betenni.

Milyen jó lenne, ha egy teljes forráskód blokkot egyetlen sorban, egy rövid mozdulattal lehetne megjegyzésbe tenni, és kivenni onnan. Hát kérem itt a megoldás:

<?php
/*
function foo($bar) {
  return $bar . ' a foo fuggveny NEM letezik';
}
// */
?>

<?php
function foo($bar) {
  return
$bar . ' a foo fuggveny letezik';
}
// */
?>

Inkább nem magyaráznám el, hogy működik, elég egyértelmű.

Én még nem ismertem ezt, és örülök neki :)

Jósolható a PHP rand() függvénye win32 alatt

A weblabor php listáján hívta fel Fejes Dévid a figyelmet arra, hogy nála bizony fúrcsán viselkedik a php rand() függvénye. Akkor is utánanéztem, a dolognak, de most megint belefutottam a problémába.

Itt a teszt script (Fejes Dávid munkája):

<?php
header
("Content-type: image/png");
$im = @imagecreatetruecolor(512, 512) or die("Cannot Initialize new GD image stream");
$white = imagecolorallocate($im, 255, 255, 255);
for(
$y=0;$y<512;$y++){
  for(
$x=0;$x<512;$x++){
    if(
rand(0,1)){
     
imagesetpixel($im, $x, $y, $white);
    }
  }
}
imagepng($im);
imagedestroy($im);
?>

Ez a program windows rendszereken ilyen kimenetet ad:

Pedig valami ilyet kellene neki:

Ráadásul, ha egyszer sem seed-elünk, azaz nem hívunk srand()-ot, és legalább 512x512 képet generálunk, akkor teljes mértékben ismétlődik: újragenerálva, pontosan ugyanazt a képet kapjuk!

A megoldás, ha rand() helyett mt_rand()-ot használunk, vagy ha minden rand() előtt hívunk egy srand()-ot is. (Nem elég a program futás elején az srand, minden rand előtt hívni kell!)

Megnéztem, kis kedvencemben is mindenhol mt_rand()-ot használnak.

Hónap utolsó napja PHP-ben

Egy költségnyilvántartó programot fejlesztek, és szükségem volt arra, hogy egy űrlap mező kezdőérékként mindig az aktuális hónap utolsó napját vegye fel. Az ilyen dátum manipuláló dolgokat én mindig a PHP date és strtotime függvényekkel oldom meg. De kiderült, hogy ez nem is olyan egyszerű. Ha egy sorba akarnám írni, az bizony nagyon hosszú lenne. Bár írtam rá egy függvényt:

<?php
 
function last_day_of_month($date = NULL) {
    if (
$date === NULL) $date = date('Y-m-d');
   
$ts = strtotime($date);
   
$months = 12 * date('Y', $ts) + date('m', $ts) + 1;
    return
date('Y-m-d', strtotime( floor($months / 12) .'-'. $months % 12 . '-01 00:00:00' ) -1);
  }
?>

de mint kiderült, felesleges volt. A PHP ezt már alapkiszerelésben is tudja, méghozzá a fent linkelt date függvény t paraméterével.

A hónap utolsó napjának meghatározása PHP-ben, tehát ilyen egyszerű:

<?php
 
// aktuális hónap
 
$honap_utolso_napja = date('Y-m-t');

 
// bármelyik hónap, ahol 1234567890 egy unix timestamp
 
$honap_utolso_napja = date('Y-m-t', 1234567890);
?>

Biztos van aki már tudott erről, nekem még új volt ez az infó.

Xdebug használata windows-on

Az Xdebug egy PHP kiegészítés, amellyel, nem meglepő módon, egy debug eszköz PHP szkriptekhez.

Tartalom

Miért telepítsük az Xdebug-ot
Xdebug telepítése windows környezetben


Miért telepítsük az Xdebug-ot

Segítségével olyan információkat szerezhetünk futás közben amelyket egyébként csak nagyon körülményesen, vagy sehogyan sem tudhatnánk meg.

Például az xdebug_call_function() függvény megmondja, hogy melyik volt az a függvény amely az éppen aktuális függvényt meghívta.

<?php
function caller() {
  return
callee();
}

function
callee() {
  echo
xdebug_call_function();
  return
"Hello World";
}

caller();
?>

A fenti kód kimenete caller lesz.

Ez csak egy példa, emellett rengeteg hasznos dolgot tud még az Xdebug. Részleteket lásd a dokumentációban


Xdebug telepítése windows környezetben

Mi sem egyszerűbb ennél, mindössze 3 lépés az egész!

1. Töltsük le az egyik windows-ra előre lefordított DLL-t. Jelenleg a legfrissebb: http://xdebug.org/link.php?url=xdebug202-51-win

2. A letöltött DLL fájlt másoljuk be a PHP ext könyvtárába.

3. Végül egészítsük ki a php.ini-t a következőkkel:

zend_extension_ts="c:\php\ext\php_xdebug.dll"

[xdebug]
xdebug.auto_trace = 1
xdebug.collect_includes = 1
xdebug.collect_params = 1
xdebug.collect_return = 1
xdebug.default_enable = 1
xdebug.extended_info = 1
xdebug.show_local_vars = 0
xdebug.show_mem_delta = 1
xdebug.trace_format = 1
xdebug.trace_options = 0
xdebug.trace_output_dir = "C:\xampp"

Természetesen az első sort módosítsuk a PHP helyének megfelelően. Az utolsó sor azt a könyvtárat adja meg, ahová az Xdebug a trace információkat menti majd el. Ez bárhol lehet, csak léteznie kell a könyvtárnak.

Feliratkozás RSS - php tippek csatornájára