Archives du mot-clef php

Symfony2 how to add a response header for each request

JsonResponseListener.php

<?php
namespace MyCorp\MyBundle\Listener;
 
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
 
class JsonResponseListener
{
    public function onKernelResponse(FilterResponseEvent $event)
    {   
        $request = $event->getRequest();
 
        if(strpos($request->getHost(), 'api.') === false) {
            return;
        }                                                                                                                                                                                                                         
        $event->getResponse()->headers->set('Access-Control-Allow-Headers', 'origin, content-type, accept');
        $event->getResponse()->headers->set('Access-Control-Allow-Origin', '*');
        $event->getResponse()->headers->set('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE OPTIONS');
    }   
}

services.xml

<?xml version="1.0" ?>
 
<container xmlns="http://symfony.com/schema/dic/services"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
 
    <services>
        <service id="mycorp.filter_response_listener" class="MyCorp\MyBundle\Listener\JsonResponseListener">
            <tag name="kernel.event_listener" event="kernel.response" method="onKernelResponse" />
        </service>
    </services>
</container>

php cron lock method

<?php
class CronJob {
  private $_lock;
 
  public function __construct() {
        $this->_lock = fopen(__FILE__, 'r');
 
        if (!flock($this->_lock, LOCK_EX|LOCK_NB)) {
            die('already running !'.PHP_EOL);
        }
  }
 
  public function doTheJob() {
        // DO THE JOB HERE
  }
 
  public function __destruct(){
       flock($this->_lock, LOCK_UN);
       fclose($this->_lock);
  }
}

php.net:flock

PHP iterative constructs

while

$i = 0;
while($i < 10) {
  echo $i.PHP_EOL; // 0 1 ...... 8 9
  $i++;
}
 
$i = 10;
do {
  echo $i.PHP_EOL; // 10 because in a do while loop the code will be executed a least once
  $i++;            // even if the condition never true
} while($i < 10);

for

for($i = 0;$i < 10; $i++) {
  echo $i.PHP_EOL; // 0 1 ...... 8 9
}
 
for($i = 0, $j = 10;$i < 10, $j > 0 ; $i++, $j--) {
  echo $i.' '.$j.', '.PHP_EOL; // 0 10, ... 4 6, ... ,9 1
}

break/continue

$i = 0;
while($i < 10) {
  if($i == 5) {
    break;
  }
  echo $i.PHP_EOL; // 0 1 2 3 4
  $i++;
}
 
$i = 0;
while($i < 10) {
  for($j = 0; $j < 10; $j++) {
    if($j + $i == 15) {
      echo $j.' + '.$i; // 9 + 6
      break 2; // exit from this loop and the next one
    }
  }
  echo $i.PHP_EOL; // 0 1 2 3 4 5
  $i++;
}
 
for($i = 0;$i < 10; $i++) {
  if($i > 3 && $i < 7) {
    continue;
  }
  echo $i.PHP_EOL; // 0 1 2 3 7 8 9
}

PHP conditionals structures

if elseif else

$var1 = true;
$var2 = false;
$var3 = 'php';
 
if($var1) {
  $a = 1;
} elseif(!$var2) {
  $a = 2;
} else {
  $a = 3;
}
echo $a; // 1
 
if($var1) {
  if($var2) {
    $a = 1;
  } else {
    $a = 2;
  }
}
echo $a; // 2
 
if(!$var2) {
  if(!$var1) {
    $a = 1;
  } elseif($var3) { // string (!= 0) to boolean always true
    $a = 2;
  } else {
    $a = 3;
  }
} else {
  $a = 4;
}
echo $a; // 2

ternary operator

$i = 2;
echo 1 == $i ? 'true':'false'; // false
 
$i = 2;
echo 1 != $i ? 'true':'false'; // true
 
$i = 2;
echo 2 == $i ? 'true':'false'; // true

switch

$var = true;
switch ($var) {
case true:
  $a = 1;
  break;
case false:
  $a = 2;
  break;
default:
  $a = 3;
}
echo $a; // 1
 
 
$var = 'php';
switch ($var) {
case true:
  $a = 1;
  break;
case false:
  $a = 2;
  break;
default:
  $a = 3;
}
echo $a; // 1, $var evaluate to true string (!= 0) to boolean always true
 
$var = 'php';
switch ($var) {
case 'perl':
  $a = 1;
  break;
case 'python':
  $a = 2;
  break;
default:
  $a = 3;
}
echo $a; // 3

PHP logical operators

$var1 = true;
$var2 = false;
$var3 = 'php';
 
echo $var1; // true
echo !$var1; // false
echo $var2; // false
echo !$var2; // true
 
if($var1 && $var2)
  $a = 'ok';
else
  $a = 'ko';
 
echo $a; // ko because $var1 and $var2 are not true
 
if($var1 || $var2)
  $a = 'ok';
else
  $a = 'ko';
 
echo $a; // ok because $var1 or $var2 is true
 
$var2 = true;
if($var1 XOR $var2)
  $a = 'ok';
else
  $a = 'ko';
 
echo $a; // ko because $var1 and $var2 are true, but XOR allow only one at true not both
 
echo (boolean)$var3; // true
echo !$var3; // false

PHP comparaison operators

$var1 = '24'; // $var1 contains string 24
$var2 = 24; // $var2 contains integer 24
 
if($var1 == $var2) // check if $var1 value is equal to $var2 value
  $a = 'equal';
else
  $a = 'different';
echo $a; // equal
 
if($var1 === $var2) // check if $var1 value is equal to $var2 value and type
  $a = 'equal';
else
  $a = 'different';
echo $a; // different because type is different
 
if($var1 != $var2) // check if $var1 value is different from $var2 value
  $a = 'different';
else
  $a = 'equal';
echo $a; // different
 
if($var1 !== $var2) // check if $var1 value is different from $var2 value or if type is different
  $a = 'different';
else
  $a = 'equal';
echo $a; // different

PHP assignement operators

$var = 'value'; // $var contains string value
$var = 1; // $var contains integer 1
$var = '1'; // $var contains string 1
$var = true; // $var contains boolean true
$var = 'true'; // $var contains string true
 
$var = 1;
$var += 5; // 1 + 5 = 6
 
$var1 = 1;
$var2 = &$var1; // $var2 -> $var1
$var2 = 2; // $var2 set $var1 to integer 2 by reference
echo $var1; // 2

PHP bitwise operators

$i = 0;
echo ~$i; // -1
 
$i = 1;
echo ~$i; // 0
 
$i = 24;
echo $i << 1; // 24x2 = 48
echo $i << 2; // 24x2x2 = 96
echo $i >> 1; // 24/2 = 12
echo $i >> 2; // 24/2/2 = 6
 
$permissions = array('read' => 1,
                     'write' => 2,
                     'edit' => 4,
                     'delete' => 8);
 
$user = $permissions['read'] | $permissions['write'] | $permissions['edit'];
 
$can_edit = $user & $permissions['edit'];
$can_delete = $user & $permissions['delete'];
 
echo $can_edit; // 4 true
echo $can_delete; // 0 false

PHP operators

<?php
$i = 1;
echo $i++; // 1
 
$i = 1;
echo ++$i; // 2
 
$i = 'php';
echo ++$i; // phq
 
$i = (string)'php';
$i = (integer)$i; // string to integer = 0
echo ++$i; // 1