SlideShare uma empresa Scribd logo
1 de 98
Baixar para ler offline
CLI,	
  the	
  other	
  SAPI
                                        Confoo
                                        Thursday	
  March	
  10th	
  2011
                                        Montreal,	
  Canada




                                  php


Thijs	
  Feryn
Evangelist
+32	
  (0)9	
  218	
  79	
  06
thijs@combellgroup.com
About	
  me




 I’m	
  an	
  Evangelist	
  at	
  Combell
About	
  me




 I’m	
  a	
  board	
  member	
  at	
  PHPBenelux
I	
  live	
  in	
  the	
  wonderful	
  city	
  of	
  Bruges
      MPBecker	
  -­‐	
  Bruges	
  by	
  Night	
  hWp://www.flickr.com/photos/galverson2/3715965933
Follow	
  me	
  on	
  Twi+er:	
  @ThijsFeryn

Give	
  me	
  feedback:	
  h+p://joind.in/2852

  Read	
  my	
  blog:	
  h+p://blog.feryn.eu
SAPI	
  according	
  to	
  Wikipedia




“The	
  Server	
  Applica^on	
  Programming	
  
Interface	
  (SAPI)	
  is	
  the	
  generic	
  term	
  used	
  to	
  
designate	
  direct	
  module	
  interfaces	
  to	
  web	
  
server	
  applica^ons”
SAPI	
  according	
  to	
  Wikipedia




          The	
  way	
  you	
  interact	
  with	
  PHP
Common	
  SAPIs


           •   Apache/Apache	
  2
           •   CGI
           •   FastCGI
           •   ISAPI
           •   CLI
           •   GTK
The	
  CLI	
  SAPI	
  according	
  to	
  php.net



   As	
  of	
  version	
  4.3.0,	
  PHP	
  supports	
  a	
  new	
  SAPI	
  
   type	
  (Server	
  Applica^on	
  Programming	
  
   Interface)	
  named	
  CLI	
  which	
  means	
  Command	
  
   Line	
  Interface.	
  As	
  the	
  name	
  implies,	
  this	
  SAPI	
  
   type	
  main	
  focus	
  is	
  on	
  developing	
  shell	
  (or	
  
   desktop	
  as	
  well)	
  applica^ons	
  with	
  PHP
The	
  CLI	
  SAPI	
  according	
  to	
  php.net




PHP	
  script	
  execu^on	
  via	
  the	
  command	
  line	
  interface
When	
  to	
  use


•   In	
  crons
•   For	
  batch	
  tasks
•   For	
  worker	
  processes
•   Daemons
•   Process	
  control
•   Interac^on	
  with	
  other	
  binaries
CLI 101
CLI 101
The PHP binary
Passing arguments
Reading from STDIN
I/O with pipes
CLI 101
Invoking a script with the
        PHP binary

php	
  file.php
CLI 101
    Passing arguments



php	
  file.php	
  arg1	
  arg2
CLI 101
    interpreting arguments

<?php
echo "Number of arguments {$argc}n";
foreach($argv as $key=>$argument){
    echo "Argument # {$key}: {$argument}n"; 
}
CLI 101
    interpreting arguments
                    Argument	
  
       Argument	
     count
         array
<?php
echo "Number of arguments {$argc}n";
foreach($argv as $key=>$argument){
    echo "Argument # {$key}: {$argument}n"; 
}
CLI 101      The	
  
                 PHP	
  file	
  is	
  an	
  
interpreting arguments
                 argument	
  too
$	
  php	
  args.php	
  arg1	
  arg2
Number	
  of	
  arguments	
  3
Argument	
  #	
  0:	
  args.php
Argument	
  #	
  1:	
  arg1
Argument	
  #	
  2:	
  arg2
$
CLI 101
   interpreting arguments
$_SERVER[‘argc’]      $argc

$_SERVER[‘argv’]      $argv

   !!! register_argc_argv !!!
CLI 101
            getopt


<?php
$arguments = getopt('ab:c::');
var_dump($arguments);
CLI 101
            getopt           Op^onal	
  
              Flag	
  
           (no	
  value)      value
<?php
$arguments = getopt('ab:c::');
var_dump($arguments);
                           Required	
  
                            value
CLI 101
php	
  getopt.php	
  -­‐a	
  -­‐b	
  2	
  -­‐c3
array(3)	
  {
	
  	
  ["a"]=>                                  No	
  
	
  	
  bool(false)
	
  	
  ["b"]=>                              spacing	
  for	
  
	
  	
  string(1)	
  "2"                      op^onal	
  
	
  	
  ["c"]=>                              arguments
	
  	
  string(1)	
  "3"
}
CLI 101
      getopt: longopts


<?php
$arguments = getopt('',array
('arg1','arg2:','arg3::'));
var_dump($arguments);
CLI 101
php	
  getopt2.php	
  -­‐-­‐arg1	
  -­‐-­‐arg2	
  123	
  -­‐-­‐arg3=x
array(3)	
  {
	
  	
  ["arg1"]=>
	
  	
  bool(false)                                 Mind	
  
	
  	
  ["arg2"]=>                           the	
  “=”	
  sign
	
  	
  string(3)	
  "123"
	
  	
  ["arg3"]=>
	
  	
  string(1)	
  "x"
}
CLI 101
     REading From STDIN
<?php
$handle = fopen('php://stdin','r');
while(!feof($handle)){
    $line = trim(fgets($handle));
    if(strlen($line) > 0){
        echo strrev($line).PHP_EOL;
    }
}
fclose($handle);
CLI 101
$	
  cat	
  test.txt	
  |	
  php	
  stdin.php	
  
enO
owT
eerhT
$
CLI 101
$	
  cat	
  test.txt	
  |	
  php	
  stdin.php	
  
enO
owT
                 Output	
          Convert	
  
eerhT
$                 file           output	
  to	
  
                               input	
  with	
  
                                 pipes
Comparing	
  the	
  Apache	
  &	
  CLI	
  SAPI
Comparing	
  the	
  Apache	
  &	
  CLI	
  SAPI

                  Web	
  based	
  SAPI’s
•   HTTP	
  is	
  a	
  stateless	
  protocol
•   Request/response	
  based
•   Limited	
  interac^on
•   Sessions	
  &	
  cookies	
  as	
  workaround
•   Execu^on	
  ^meouts
•   Limited	
  request/response	
  size
Comparing	
  the	
  Apache	
  &	
  CLI	
  SAPI


                            CLI	
  SAPI
•   Controlable	
  state
•   Controlable	
  script	
  execu^on
•   Con^nuous	
  interac^on
•   No	
  need	
  for	
  sessions
•   No	
  execu^on	
  ^meouts
Measuring	
  the	
  state
Input	
  &	
  output
Input	
  &	
  output


             Web                   CLI
•   $_SERVER           •   $_SERVER
•   $_GET              •   $argc/$argv
•   $_POST             •   $_ENV
•   $_COOKIE           •   getopt()
•   $_SESSION          •   STDIN/STDOUT/
                           STDERR
•   $_ENV
Change	
  your	
  mindset
Change	
  your	
  mindset


        Don’t	
  use	
  sessions	
  &	
  cookies



             Just	
  use	
  local	
  variables
Change	
  your	
  mindset


             Don’t	
  “get”	
  your	
  input



                    Just	
  “read”	
  it
Change	
  your	
  mindset


           Don’t	
  bundle	
  your	
  output



      You	
  can	
  use	
  distributed	
  output
Change	
  your	
  mindset


       If	
  you	
  don’t	
  need	
  HTTP,	
  use	
  CLI

                                                    E.g.	
  
                                                  cronjobs
                  Avoid	
  overhead
Change	
  your	
  mindset


        Current	
  directory	
  !=	
  webroot

                                          CLI	
  
                                      scripts	
  are	
  
➡Use	
  dirname(__FILE__)            executable	
  
                                     everywhere
➡Use	
  chdir()
➡Use	
  getcwd()
The	
  PHP	
  binary




                       php
The	
  PHP	
  binary


Usage:	
  php	
  [options]	
  [-­‐f]	
  <file>	
  [-­‐-­‐]	
  [args...]
	
  	
  	
  	
  	
  	
  	
  php	
  [options]	
  -­‐r	
  <code>	
  [-­‐-­‐]	
  [args...]
	
  	
  	
  	
  	
  	
  	
  php	
  [options]	
  [-­‐B	
  <begin_code>]	
  -­‐R	
  <code>	
  
[-­‐E	
  <end_code>]	
  [-­‐-­‐]	
  [args...]
	
  	
  	
  	
  	
  	
  	
  php	
  [options]	
  [-­‐B	
  <begin_code>]	
  -­‐F	
  <file>	
  
[-­‐E	
  <end_code>]	
  [-­‐-­‐]	
  [args...]
	
  	
  	
  	
  	
  	
  	
  php	
  [options]	
  -­‐-­‐	
  [args...]
	
  	
  	
  	
  	
  	
  	
  php	
  [options]	
  -­‐a
InteracOve	
  mode	
  (-­‐a)

       $	
  php	
  -­‐a
       Interactive	
  shell

       php	
  >	
  echo	
  5+8;
       13
       php	
  >	
  function	
  addTwo($n)
       php	
  >	
  {
       php	
  {	
  return	
  $n	
  +	
  2;
       php	
  {	
  }
       php	
  >	
  var_dump(addtwo(2));
       int(4)
       php	
  >
InteracOve	
  mode	
  (-­‐a)


       $	
  php	
  -­‐a                                   Tab	
  
       Interactive	
  shell                            comple^on
       php	
  >	
  stri[TAB][TAB]
       strip_tags	
  	
  	
  	
  	
  stripcslashes	
  	
  
       stripslashes	
  	
  	
  stristr	
  	
  	
  	
  	
  	
  	
  	
  
       stripos	
  	
  	
  	
  	
  	
  	
  	
  
       php	
  >	
  stri
Run	
  code	
  (-­‐r)




      $	
  php	
  -­‐r	
  "echo	
  date('Y-­‐m-­‐d	
  H:i:s');"
      2011-­‐03-­‐02	
  22:04:45
      $
Config	
  directory	
  (-­‐c)




 $	
  php	
  -­‐c	
  /custom/dir/php.ini	
  script.php
Define	
  custom	
  INI	
  seSng	
  (-­‐d)



 $	
  php	
  -­‐d	
  max_execution_time=20	
  -­‐r	
  '$foo	
  =	
  
 ini_get("max_execution_time");	
  var_dump
 ($foo);'
 string(2)	
  "20"
 $
Get	
  INI	
  informaOon	
  (-­‐i)
                                     Filtering	
  
                                      items
 $	
  php	
  -­‐i	
  |	
  grep	
  “log_”
 define_syslog_variables	
  =>	
  Off	
  =>	
  Off
 log_errors	
  =>	
  On	
  =>	
  On
 log_errors_max_len	
  =>	
  1024	
  =>	
  1024
 $
Syntax/lint	
  check	
  (-­‐l)
                                     Only	
  
                                 checks	
  parse	
  
                                    errors
 $	
  php	
  -­‐l	
  myFile.php
 No	
  syntax	
  errors	
  detected	
  in	
  myFile.php
 $
Module	
  list	
  (-­‐m)

 $	
  php	
  -­‐m
 [PHP	
  Modules]
 bcmath
 bz2
 calendar
 Core
 ctype
 curl
 date
 dba
 $
Syntax	
  highlighOng	
  (-­‐s)




<?php
echo	
  "Hello	
  world";


$	
  php	
  -­‐s	
  helloworld.php	
  >	
  helloworld.html
$
Syntax	
  highlighOng	
  (-­‐s)

<code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /
></span><span style="color:
#007700">echo&nbsp;</span><span
style="color:
#DD0000">"Hello&nbsp;world"</span><span
style="color: #007700">;</span>
</span>


<?php
echo "Hello world";
Version	
  info	
  (-­‐v)


 $	
  php	
  -­‐v
 PHP	
  5.3.3-­‐1ubuntu9.3	
  with	
  Suhosin-­‐Patch	
  
 (cli)	
  (built:	
  Jan	
  12	
  2011	
  16:07:38)	
  
 Copyright	
  (c)	
  1997-­‐2009	
  The	
  PHP	
  Group
 Zend	
  Engine	
  v2.3.0,	
  Copyright	
  (c)	
  1998-­‐2010	
  
 Zend	
  Technologies
 $
FuncOon	
  reflecOon	
  (-­‐-­‐rf)

$	
  php	
  -­‐-­‐rf	
  json_encode
Function	
  [	
  <internal:json>	
  function	
  
json_encode	
  ]	
  {

	
  	
  -­‐	
  Parameters	
  [2]	
  {
	
  	
  	
  	
  Parameter	
  #0	
  [	
  <required>	
  $value	
  ]
	
  	
  	
  	
  Parameter	
  #1	
  [	
  <optional>	
  $options	
  ]
	
  	
  }
}
$
Class	
  reflecOon	
  (-­‐-­‐rf)
 $	
  php	
  -­‐-­‐rc	
  stdclass
 Class	
  [	
  <internal:Core>	
  class	
  stdClass	
  ]	
  {
 	
  	
  -­‐	
  Constants	
  [0]	
  {
 	
  	
  }
 	
  	
  -­‐	
  Static	
  properties	
  [0]	
  {
 	
  	
  }
 	
  	
  -­‐	
  Static	
  methods	
  [0]	
  {
 	
  	
  }
 	
  	
  -­‐	
  Properties	
  [0]	
  {
 	
  	
  }
 	
  	
  -­‐	
  Methods	
  [0]	
  {
 	
  	
  }
 }
 $
Extension	
  reflecOon	
  (-­‐-­‐re)

$	
  php	
  -­‐-­‐re	
  json
Extension	
  [	
  <persistent>	
  extension	
  #20	
  json	
  version	
  1.2.1	
  ]	
  {
...
	
  	
  -­‐	
  Functions	
  {
	
  	
  	
  	
  Function	
  [	
  <internal:json>	
  function	
  json_encode	
  ]	
  {

	
  	
  	
  	
  	
  	
  -­‐	
  Parameters	
  [2]	
  {
	
  	
  	
  	
  	
  	
  	
  	
  Parameter	
  #0	
  [	
  <required>	
  $value	
  ]
	
  	
  	
  	
  	
  	
  	
  	
  Parameter	
  #1	
  [	
  <optional>	
  $options	
  ]
	
  	
  	
  	
  	
  	
  }
	
  	
  	
  	
  }
...
}
Extension	
  INI	
  informaOon	
  (-­‐-­‐ri)



 $	
  php	
  -­‐-­‐ri	
  pdo

 PDO

 PDO	
  support	
  =>	
  enabled
 PDO	
  drivers	
  =>	
  mysql,	
  sqlite,	
  sqlite2
 $
Back	
  on	
  track
Back	
  to	
  I/O
STDIN


  <?php
  $handle = fopen('php://stdin','r');
  while(!feof($handle)){
      $line = trim(fgets($handle));
      if(strlen($line) > 0){
          echo strrev($line).PHP_EOL;
      }
  }
  fclose($handle);
STDIN


  <?php
  $handle = fopen('php://stdin','r');
  while(!feof($handle)){
      $line = trim(fgets($handle));
      if(strlen($line) > 0){
          echo strrev($line).PHP_EOL;
      }
  }
  fclose($handle);
STDIN


  <?php

  while(!feof(STDIN)){
      $line = trim(fgets(STDIN));
      if(strlen($line) > 0){
          echo strrev($line).PHP_EOL;
      }
  }
STDIN
                      Stream	
  
                   that	
  is	
  opened	
  
  <?php              by	
  default
  while(!feof(STDIN)){
      $line = trim(fgets(STDIN));
      if(strlen($line) > 0){
          echo strrev($line).PHP_EOL;
      }
  }
STDIN


            The	
                        Stream	
  
                                     that	
  is	
  opened	
  
           proof	
  !                  by	
  default
 $	
  php	
  -­‐r	
  "var_dump(STDIN);"
 resource(1)	
  of	
  type	
  (stream)
 $
Wordcount	
  example

<?php
$wordArray = array();
while(!feof(STDIN)){
    $line = trim(fgets(STDIN));
    if(strlen($line) > 0){
        foreach(preg_split('/[s]+/',$line) as $word){
            if(!array_key_exists($word,$wordArray)){
                $wordArray[$word] = 0;
            }
            $wordArray[$word]++;
        }
    }
}
ksort($wordArray);
foreach($wordArray as $word=>$count){
    echo "$word: $count".PHP_EOL;
}
Wordcount	
  example

$	
  cat	
  wordcount.txt	
  
Canada
Thijs
Canada
Thijs
Thijs
Confoo
$	
  cat	
  wordcount.txt	
  	
  |	
  php	
  wordcount.php	
  
Canada:	
  2
Confoo:	
  1
Thijs:	
  3
$
STDOUT
                            STDOUT	
  
                              ==	
  
                             echo
<?php
$handle = fopen('php://stdout','w');
fwrite($handle,'Hello world');
fclose($handle);
STDOUT




<?php
fwrite(STDOUT,'Hello world');
STDERR




<?php
$handle = fopen('php://stderr','w');
fwrite($handle,'Serious error!');
fclose($handle);
STDERR




<?php
fwrite(STDERR,'Serious error!');
Mixing	
  STDOUT	
  &	
  STDERR


<?php
fwrite(STDOUT,'STDOUT output'.PHP_EOL);
fwrite(STDERR,'STDERR output'.PHP_EOL);

$	
  php	
  stdmix.php	
  
STDOUT	
  output
STDERR	
  output
$
Mixing	
  STDOUT	
  &	
  STDERR


<?php
                Looks	
  
fwrite(STDOUT,'STDOUT output'.PHP_EOL);
              the	
  same
fwrite(STDERR,'STDERR output'.PHP_EOL);

$	
  php	
  stdmix.php	
  
STDOUT	
  output
STDERR	
  output
$
Mixing	
  STDOUT	
  &	
  STDERR


$	
  php	
  stdmix.php	
  >	
  /dev/null	
  
STDERR	
  output
$


$	
  php	
  stdmix.php	
  &>	
  	
  /dev/null
$
Mixing	
  STDOUT	
  &	
  STDERR
                                                 STDOUT	
  
                                                is	
  caught
$	
  php	
  stdmix.php	
  >	
  /dev/null	
           STDOUT	
  
STDERR	
  output
$                                               &	
  STDERR	
  are	
  
                                                      caught
$	
  php	
  stdmix.php	
  &>	
  	
  /dev/null
$
AlternaOve	
  output



<?php
fclose(STDOUT);
$handle = fopen(realpath(dirname(__FILE__).'/
output.txt'),'a');
echo "Hello world!".PHP_EOL;
fclose($handle);
AlternaOve	
  output



<?php
fclose(STDOUT);
$handle = fopen(realpath(dirname(__FILE__).'/
output.txt'),'a');
echo "Hello world!".PHP_EOL;
fclose($handle);
                             echo	
  
                       output	
  is	
  wriWen	
  
                            to	
  file
Piping

$	
  php	
  -­‐r	
  'for($i=0;$i<10;$i++)	
  echo	
  $i.PHP_EOL;'
0
1
2
3
4
5
6
7
8
9
$	
  php	
  -­‐r	
  'for($i=0;$i<10;$i++)	
  echo	
  $i.PHP_EOL;'	
  |	
  wc	
  -­‐l
	
  	
  	
  	
  	
  	
  10
$
Readline


<?php
$name = readline("What's your name: ");
$location = readline("Where do you live: ");
echo PHP_EOL."Hello $name from $locationn";

$	
  php	
  readline.php	
  
What's	
  your	
  name:	
  Thijs
Where	
  do	
  you	
  live:	
  Belgium

Hello	
  Thijs	
  from	
  Belgium
$
Shebang	
  !


#!/usr/bin/php
<?php
echo "Hello world".PHP_EOL;


$	
  chmod	
  +x	
  shebang.php
$	
  ./shebang.php
Hello	
  world
$
Encore
PCNTL	
  according	
  to	
  php.net


      Process	
  Control	
  support	
  in	
  PHP	
  
   implements	
  the	
  Unix	
  style	
  of	
  process	
  
    crea^on,	
  program	
  execu^on,	
  signal	
  
     handling	
  and	
  process	
  termina^on.
Process	
  Control	
  should	
  not	
  be	
  enabled	
  
  within	
  a	
  web	
  server	
  environment	
  and	
  
  unexpected	
  results	
  may	
  happen	
  if	
  any	
  
Process	
  Control	
  func^ons	
  are	
  used	
  within	
  
       a	
  web	
  server	
  environment.
Forking	
  according	
  to	
  Wikipedia


  In	
  compu^ng,	
  when	
  a	
  process	
  forks,	
  it	
  
            creates	
  a	
  copy	
  of	
  itself
Forking       PID	
  value	
  
             determines	
  
               context                        Copy	
  
<?php
                                            program	
  
$pid = pcntl_fork();
if ($pid == -1) {
                                            execu^on
  //Forking failed
} else if ($pid) {
  //Parent logic
} else {               PID	
  of	
  child	
  
  //Child logic
}                        process
Forking
<?php
$pid = pcntl_fork();
if ($pid == -1) {
     die('could not fork');
} else if ($pid) {
     echo "[parent] Starting".PHP_EOL;
     pcntl_wait($status);
     echo "[parent] Exiting".PHP_EOL;
} else {
        echo "[child] Starting".PHP_EOL;
    for($i=0;$i<3;$i++){
        echo "[child] Loop $i".PHP_EOL;
        sleep(1);
    }
    echo "[child] Exiting".PHP_EOL;
    exit;
}
Forking                     Perform	
  
                            forking
<?php
$pid = pcntl_fork();
if ($pid == -1) {
     die('could not fork');
                                Wait	
  for	
  child	
  
} else if ($pid) {              termina^on
     echo "[parent] Starting".PHP_EOL;
     pcntl_wait($status);
     echo "[parent] Exiting".PHP_EOL;
} else {
        echo "[child] Starting".PHP_EOL;
    for($i=0;$i<3;$i++){
        echo "[child] Loop $i".PHP_EOL;
        sleep(1);
    }
    echo "[child] Exiting".PHP_EOL;
    exit;
}
Signals


A	
  signal	
  is	
  a	
  limited	
  form	
  of	
  inter-­‐process	
  
 communica^on	
  used	
  in	
  Unix,	
  Unix-­‐like,	
  
   and	
  other	
  POSIX-­‐compliant	
  opera^ng	
  
systems.	
  Essen^ally	
  it	
  is	
  an	
  asynchronous	
  
 no^fica^on	
  sent	
  to	
  a	
  process	
  in	
  order	
  to	
  
      no^fy	
  it	
  of	
  an	
  event	
  that	
  occurred.
Signals

<?php
declare(ticks = 1);
function sig_handler($signo)
{
     switch ($signo) {
         case SIGTERM:
             echo PHP_EOL."SIGTERM".PHP_EOL;
             exit();
             break;
         case SIGINT:
             echo PHP_EOL."SIGINT".PHP_EOL;
             exit();
             break;
     }
}
pcntl_signal(SIGTERM, "sig_handler");
pcntl_signal(SIGINT, "sig_handler");
sleep(100);
Signals

<?php
declare(ticks = 1);           Process	
  
                            termina^on
function sig_handler($signo)
{
     switch ($signo) {
         case SIGTERM:
                                           Process	
  
             echo PHP_EOL."SIGTERM".PHP_EOL;
             exit();
             break;
         case SIGINT:                   interrup^on
             echo PHP_EOL."SIGINT".PHP_EOL;
             exit();
             break;

                                           Catch	
  signals
     }
}
pcntl_signal(SIGTERM, "sig_handler");
pcntl_signal(SIGINT, "sig_handler");
sleep(100);
POSIX	
  process	
  control	
  funcOons

<?php
echo "[prefork] PID: ".posix_getpid
().", parent PID: ".posix_getppid().PHP_EOL;
$pid = pcntl_fork();
if ($pid == -1) {
  die('could not fork');
} else if ($pid == 0) {
  echo "[child] PID: ".posix_getpid
().", parent PID: ".posix_getppid().PHP_EOL;
  exit;
} else {
  echo "[parent] PID: ".posix_getpid
().", parent PID: ".posix_getppid().PHP_EOL;
  pcntl_wait($status);
}
Parent	
  PID	
                  Prefork	
  PID	
  
POSIX	
  process	
  c==	
   funcOons
    of	
  parent	
   ontrol	
              ==	
  
<?php
     session	
  PID                    parent	
  PID
echo "[prefork] PID: ".posix_getpid
().", parent PID: ".posix_getppid().PHP_EOL;
$pid = pcntl_fork();
if ($pid == -1) {
     die('could not fork');                  child	
  PID
} else if ($pid == 0) {
   child	
  PID
        echo "[child] PID: ".posix_getpid
().", parent PID: ".posix_getppid().PHP_EOL;
        exit;                                   parent	
  
} else {                                         PID
        echo "[parent] PID: ".posix_getpid
().", parent PID: ".posix_getppid().PHP_EOL;
        pcntl_wait($status);
}
POSIX	
  process	
  control	
  funcOons

<?php
$pid=pcntl_fork();
if ($pid == -1) {
    die("could not fork");
} else if ($pid) {
    $exists = posix_kill($pid,0)?'still':'no longer';
    echo "[parent] Child process $pid $exists exists".PHP_EOL;
    echo "[parent] Killing child process $pid".PHP_EOL;
    posix_kill($pid,SIGTERM);
    echo "[parent] Child process $pid killed".PHP_EOL;
    pcntl_wait($status);
    $exists = posix_kill($pid,0)?'still':'no longer';
    echo "[parent] Child process $pid $exists exists".PHP_EOL;
} else {
    while(true){
        sleep(100);
    }
    exit;
}
POSIX	
  process	
  control	
  funcOons
                           “KILL	
  0”	
  checks	
  
<?php
$pid=pcntl_fork();            existence
if ($pid == -1) {
    die("could not fork");
} else if ($pid) {
                                       Send	
  SIGTERM	
  
    $exists = posix_kill($pid,0)?'still':'no longer';
    echo "[parent] Child process $pid $exists exists".PHP_EOL;
                                           signal
    echo "[parent] Killing child process $pid".PHP_EOL;
    posix_kill($pid,SIGTERM);
    echo "[parent] Child process $pid killed".PHP_EOL;
    pcntl_wait($status);
    $exists = posix_kill($pid,0)?'still':'no longer';
    echo "[parent] Child process $pid $exists exists".PHP_EOL;
} else {
    while(true){
                                             Child	
  process	
  
        sleep(100);
    }
                                                is	
  dead
    exit;
}
Some	
  PCNTL	
  guidelines

✓Detect	
  your	
  CWD
✓Use	
  PID	
  files
✓Control	
  you	
  file	
  privileges
✓Detach	
  you	
  session
✓Avoid	
  rogue	
  child	
  processes
✓Cleanup	
  your	
  garbage
Talk	
  
                                                            dedicated	
  to	
  
                                                           process	
  control	
  
Check	
  this	
  
guy	
  out	
  !                                                in	
  PHP
                     Jeroen	
  Keppens:	
  @jkeppens
                http://www.slideshare.net/jkeppens/php-­‐in-­‐the-­‐dark
Q&A
Thanks	
  !

Mais conteúdo relacionado

Mais procurados

Zephir - A Wind of Change for writing PHP extensions
Zephir - A Wind of Change for writing PHP extensionsZephir - A Wind of Change for writing PHP extensions
Zephir - A Wind of Change for writing PHP extensionsMark Baker
 
Zend Certification Preparation Tutorial
Zend Certification Preparation TutorialZend Certification Preparation Tutorial
Zend Certification Preparation TutorialLorna Mitchell
 
Looping the Loop with SPL Iterators
Looping the Loop with SPL IteratorsLooping the Loop with SPL Iterators
Looping the Loop with SPL IteratorsMark Baker
 
関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐいHisateru Tanaka
 
PHP Enums - PHPCon Japan 2021
PHP Enums - PHPCon Japan 2021PHP Enums - PHPCon Japan 2021
PHP Enums - PHPCon Japan 2021Ayesh Karunaratne
 
SPL: The Missing Link in Development
SPL: The Missing Link in DevelopmentSPL: The Missing Link in Development
SPL: The Missing Link in Developmentjsmith92
 
Nikita Popov "What’s new in PHP 8.0?"
Nikita Popov "What’s new in PHP 8.0?"Nikita Popov "What’s new in PHP 8.0?"
Nikita Popov "What’s new in PHP 8.0?"Fwdays
 
PHP Conference Asia 2016
PHP Conference Asia 2016PHP Conference Asia 2016
PHP Conference Asia 2016Britta Alex
 
Php my sql - functions - arrays - tutorial - programmerblog.net
Php my sql - functions - arrays - tutorial - programmerblog.netPhp my sql - functions - arrays - tutorial - programmerblog.net
Php my sql - functions - arrays - tutorial - programmerblog.netProgrammer Blog
 
PHP 5.3 Overview
PHP 5.3 OverviewPHP 5.3 Overview
PHP 5.3 Overviewjsmith92
 
Introduction to web and php mysql
Introduction to web and php mysqlIntroduction to web and php mysql
Introduction to web and php mysqlProgrammer Blog
 
PHP Tips for certification - OdW13
PHP Tips for certification - OdW13PHP Tips for certification - OdW13
PHP Tips for certification - OdW13julien pauli
 
PHP applications/environments monitoring: APM & Pinba
PHP applications/environments monitoring: APM & PinbaPHP applications/environments monitoring: APM & Pinba
PHP applications/environments monitoring: APM & PinbaPatrick Allaert
 
PHP 良好實踐 (Best Practice)
PHP 良好實踐 (Best Practice)PHP 良好實踐 (Best Practice)
PHP 良好實踐 (Best Practice)Win Yu
 

Mais procurados (20)

Zephir - A Wind of Change for writing PHP extensions
Zephir - A Wind of Change for writing PHP extensionsZephir - A Wind of Change for writing PHP extensions
Zephir - A Wind of Change for writing PHP extensions
 
Zend Certification Preparation Tutorial
Zend Certification Preparation TutorialZend Certification Preparation Tutorial
Zend Certification Preparation Tutorial
 
Looping the Loop with SPL Iterators
Looping the Loop with SPL IteratorsLooping the Loop with SPL Iterators
Looping the Loop with SPL Iterators
 
関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい
 
PHP Enums - PHPCon Japan 2021
PHP Enums - PHPCon Japan 2021PHP Enums - PHPCon Japan 2021
PHP Enums - PHPCon Japan 2021
 
SPL: The Missing Link in Development
SPL: The Missing Link in DevelopmentSPL: The Missing Link in Development
SPL: The Missing Link in Development
 
Nikita Popov "What’s new in PHP 8.0?"
Nikita Popov "What’s new in PHP 8.0?"Nikita Popov "What’s new in PHP 8.0?"
Nikita Popov "What’s new in PHP 8.0?"
 
PHP Conference Asia 2016
PHP Conference Asia 2016PHP Conference Asia 2016
PHP Conference Asia 2016
 
PHP POWERPOINT SLIDES
PHP POWERPOINT SLIDESPHP POWERPOINT SLIDES
PHP POWERPOINT SLIDES
 
Php my sql - functions - arrays - tutorial - programmerblog.net
Php my sql - functions - arrays - tutorial - programmerblog.netPhp my sql - functions - arrays - tutorial - programmerblog.net
Php my sql - functions - arrays - tutorial - programmerblog.net
 
Functions in PHP
Functions in PHPFunctions in PHP
Functions in PHP
 
PHP 5.3 Overview
PHP 5.3 OverviewPHP 5.3 Overview
PHP 5.3 Overview
 
Introduction to web and php mysql
Introduction to web and php mysqlIntroduction to web and php mysql
Introduction to web and php mysql
 
PHP Tips for certification - OdW13
PHP Tips for certification - OdW13PHP Tips for certification - OdW13
PHP Tips for certification - OdW13
 
Perl6 in-production
Perl6 in-productionPerl6 in-production
Perl6 in-production
 
New in php 7
New in php 7New in php 7
New in php 7
 
Php Tutorials for Beginners
Php Tutorials for BeginnersPhp Tutorials for Beginners
Php Tutorials for Beginners
 
Data Types In PHP
Data Types In PHPData Types In PHP
Data Types In PHP
 
PHP applications/environments monitoring: APM & Pinba
PHP applications/environments monitoring: APM & PinbaPHP applications/environments monitoring: APM & Pinba
PHP applications/environments monitoring: APM & Pinba
 
PHP 良好實踐 (Best Practice)
PHP 良好實踐 (Best Practice)PHP 良好實踐 (Best Practice)
PHP 良好實踐 (Best Practice)
 

Destaque

POWER FACTOR CORRECTION OF A 3-PHASE 4- SWITCH INVERTER FED BLDC MOTOR
POWER FACTOR CORRECTION OF A 3-PHASE 4- SWITCH INVERTER FED BLDC MOTORPOWER FACTOR CORRECTION OF A 3-PHASE 4- SWITCH INVERTER FED BLDC MOTOR
POWER FACTOR CORRECTION OF A 3-PHASE 4- SWITCH INVERTER FED BLDC MOTORvanmukil
 
Grup Espurna Ning IM i CCBB 2010
Grup Espurna Ning IM i CCBB 2010Grup Espurna Ning IM i CCBB 2010
Grup Espurna Ning IM i CCBB 2010Nuria Alart
 
Skateboard Decks
Skateboard DecksSkateboard Decks
Skateboard DecksMrs. McCabe
 
Php through the eyes of a hoster
Php through the eyes of a hosterPhp through the eyes of a hoster
Php through the eyes of a hosterCombell NV
 
Van hosting tot cloud computing @ Intac
Van hosting tot cloud computing @ IntacVan hosting tot cloud computing @ Intac
Van hosting tot cloud computing @ IntacCombell NV
 
Php through the eyes of a hoster pbc10
Php through the eyes of a hoster pbc10Php through the eyes of a hoster pbc10
Php through the eyes of a hoster pbc10Combell NV
 
Lista unitária graduação afd 1194
Lista unitária graduação afd 1194Lista unitária graduação afd 1194
Lista unitária graduação afd 1194Pedro França
 
Graduate Design - Nutrient
Graduate Design - NutrientGraduate Design - Nutrient
Graduate Design - NutrientHaoxiang Shen
 
天地一家电子杂志策划书
天地一家电子杂志策划书天地一家电子杂志策划书
天地一家电子杂志策划书Haoxiang Shen
 

Destaque (20)

POWER FACTOR CORRECTION OF A 3-PHASE 4- SWITCH INVERTER FED BLDC MOTOR
POWER FACTOR CORRECTION OF A 3-PHASE 4- SWITCH INVERTER FED BLDC MOTORPOWER FACTOR CORRECTION OF A 3-PHASE 4- SWITCH INVERTER FED BLDC MOTOR
POWER FACTOR CORRECTION OF A 3-PHASE 4- SWITCH INVERTER FED BLDC MOTOR
 
Grup Espurna Ning IM i CCBB 2010
Grup Espurna Ning IM i CCBB 2010Grup Espurna Ning IM i CCBB 2010
Grup Espurna Ning IM i CCBB 2010
 
Skateboard Decks
Skateboard DecksSkateboard Decks
Skateboard Decks
 
Php through the eyes of a hoster
Php through the eyes of a hosterPhp through the eyes of a hoster
Php through the eyes of a hoster
 
Van hosting tot cloud computing @ Intac
Van hosting tot cloud computing @ IntacVan hosting tot cloud computing @ Intac
Van hosting tot cloud computing @ Intac
 
Beaches
BeachesBeaches
Beaches
 
Food
FoodFood
Food
 
Aula 2 good manners obedience
Aula 2 good manners   obedienceAula 2 good manners   obedience
Aula 2 good manners obedience
 
Php through the eyes of a hoster pbc10
Php through the eyes of a hoster pbc10Php through the eyes of a hoster pbc10
Php through the eyes of a hoster pbc10
 
Paris
ParisParis
Paris
 
Candy!
Candy!Candy!
Candy!
 
Musicalsby144
Musicalsby144Musicalsby144
Musicalsby144
 
Infancia e-educacao pps
Infancia e-educacao ppsInfancia e-educacao pps
Infancia e-educacao pps
 
Lista unitária graduação afd 1194
Lista unitária graduação afd 1194Lista unitária graduação afd 1194
Lista unitária graduação afd 1194
 
Test
TestTest
Test
 
Creative Story
Creative StoryCreative Story
Creative Story
 
Skies.Mccabe
Skies.MccabeSkies.Mccabe
Skies.Mccabe
 
Graduate Design - Nutrient
Graduate Design - NutrientGraduate Design - Nutrient
Graduate Design - Nutrient
 
Academic summary
Academic summaryAcademic summary
Academic summary
 
天地一家电子杂志策划书
天地一家电子杂志策划书天地一家电子杂志策划书
天地一家电子杂志策划书
 

Semelhante a Cli the other SAPI confoo11

CLI, the other SAPI
CLI, the other SAPICLI, the other SAPI
CLI, the other SAPICombell NV
 
Living With Legacy Code
Living With Legacy CodeLiving With Legacy Code
Living With Legacy CodeRowan Merewood
 
PHP from soup to nuts Course Deck
PHP from soup to nuts Course DeckPHP from soup to nuts Course Deck
PHP from soup to nuts Course DeckrICh morrow
 
Clear php reference
Clear php referenceClear php reference
Clear php referenceDamien Seguy
 
Tips
TipsTips
Tipsmclee
 
Building Testable PHP Applications
Building Testable PHP ApplicationsBuilding Testable PHP Applications
Building Testable PHP Applicationschartjes
 
Php i basic chapter 3 (syahir chaer's conflicted copy 2013-04-22)
Php i basic chapter 3 (syahir chaer's conflicted copy 2013-04-22)Php i basic chapter 3 (syahir chaer's conflicted copy 2013-04-22)
Php i basic chapter 3 (syahir chaer's conflicted copy 2013-04-22)Muhamad Al Imran
 
Php i basic chapter 3 (afifah rosli's conflicted copy 2013-04-23)
Php i basic chapter 3 (afifah rosli's conflicted copy 2013-04-23)Php i basic chapter 3 (afifah rosli's conflicted copy 2013-04-23)
Php i basic chapter 3 (afifah rosli's conflicted copy 2013-04-23)Muhamad Al Imran
 
Quality assurance for php projects with PHPStorm
Quality assurance for php projects with PHPStormQuality assurance for php projects with PHPStorm
Quality assurance for php projects with PHPStormMichelangelo van Dam
 
From CakePHP to Laravel
From CakePHP to LaravelFrom CakePHP to Laravel
From CakePHP to LaravelJason McCreary
 
The why and how of moving to php 5.4/5.5
The why and how of moving to php 5.4/5.5The why and how of moving to php 5.4/5.5
The why and how of moving to php 5.4/5.5Wim Godden
 
PHP & Performance
PHP & PerformancePHP & Performance
PHP & Performance毅 吕
 
An introduction to PHP 5.4
An introduction to PHP 5.4An introduction to PHP 5.4
An introduction to PHP 5.4Giovanni Derks
 
The why and how of moving to PHP 5.4/5.5
The why and how of moving to PHP 5.4/5.5The why and how of moving to PHP 5.4/5.5
The why and how of moving to PHP 5.4/5.5Wim Godden
 
Anatomy of a PHP Request ( UTOSC 2010 )
Anatomy of a PHP Request ( UTOSC 2010 )Anatomy of a PHP Request ( UTOSC 2010 )
Anatomy of a PHP Request ( UTOSC 2010 )Joseph Scott
 

Semelhante a Cli the other SAPI confoo11 (20)

CLI, the other SAPI
CLI, the other SAPICLI, the other SAPI
CLI, the other SAPI
 
Living With Legacy Code
Living With Legacy CodeLiving With Legacy Code
Living With Legacy Code
 
Hacking with hhvm
Hacking with hhvmHacking with hhvm
Hacking with hhvm
 
PHP from soup to nuts Course Deck
PHP from soup to nuts Course DeckPHP from soup to nuts Course Deck
PHP from soup to nuts Course Deck
 
Gun make
Gun makeGun make
Gun make
 
Clear php reference
Clear php referenceClear php reference
Clear php reference
 
Tips
TipsTips
Tips
 
Building Testable PHP Applications
Building Testable PHP ApplicationsBuilding Testable PHP Applications
Building Testable PHP Applications
 
Php i basic chapter 3 (syahir chaer's conflicted copy 2013-04-22)
Php i basic chapter 3 (syahir chaer's conflicted copy 2013-04-22)Php i basic chapter 3 (syahir chaer's conflicted copy 2013-04-22)
Php i basic chapter 3 (syahir chaer's conflicted copy 2013-04-22)
 
Php i basic chapter 3 (afifah rosli's conflicted copy 2013-04-23)
Php i basic chapter 3 (afifah rosli's conflicted copy 2013-04-23)Php i basic chapter 3 (afifah rosli's conflicted copy 2013-04-23)
Php i basic chapter 3 (afifah rosli's conflicted copy 2013-04-23)
 
Php i basic chapter 3
Php i basic chapter 3Php i basic chapter 3
Php i basic chapter 3
 
Quality assurance for php projects with PHPStorm
Quality assurance for php projects with PHPStormQuality assurance for php projects with PHPStorm
Quality assurance for php projects with PHPStorm
 
From CakePHP to Laravel
From CakePHP to LaravelFrom CakePHP to Laravel
From CakePHP to Laravel
 
The why and how of moving to php 5.4/5.5
The why and how of moving to php 5.4/5.5The why and how of moving to php 5.4/5.5
The why and how of moving to php 5.4/5.5
 
PHP & Performance
PHP & PerformancePHP & Performance
PHP & Performance
 
Introduction to php basics
Introduction to php   basicsIntroduction to php   basics
Introduction to php basics
 
An introduction to PHP 5.4
An introduction to PHP 5.4An introduction to PHP 5.4
An introduction to PHP 5.4
 
The why and how of moving to PHP 5.4/5.5
The why and how of moving to PHP 5.4/5.5The why and how of moving to PHP 5.4/5.5
The why and how of moving to PHP 5.4/5.5
 
Php Intermediate
Php IntermediatePhp Intermediate
Php Intermediate
 
Anatomy of a PHP Request ( UTOSC 2010 )
Anatomy of a PHP Request ( UTOSC 2010 )Anatomy of a PHP Request ( UTOSC 2010 )
Anatomy of a PHP Request ( UTOSC 2010 )
 

Mais de Combell NV

Play it extra safe! Kies een goede cyberverzekering
Play it extra safe! Kies een goede cyberverzekeringPlay it extra safe! Kies een goede cyberverzekering
Play it extra safe! Kies een goede cyberverzekeringCombell NV
 
Hoe gebruik je het resellerplatform als partner van Combell
Hoe gebruik je het resellerplatform als partner van CombellHoe gebruik je het resellerplatform als partner van Combell
Hoe gebruik je het resellerplatform als partner van CombellCombell NV
 
Managed WordPress bij Combell – wat doet dat precies?
Managed WordPress bij Combell – wat doet dat precies?Managed WordPress bij Combell – wat doet dat precies?
Managed WordPress bij Combell – wat doet dat precies?Combell NV
 
Back-ups: Hoe ze je kunnen redden van een cyberaanval
Back-ups: Hoe ze je kunnen redden van een cyberaanvalBack-ups: Hoe ze je kunnen redden van een cyberaanval
Back-ups: Hoe ze je kunnen redden van een cyberaanvalCombell NV
 
Cyberaanvallen: Overzicht, gevolgen en beveiligingstips
Cyberaanvallen: Overzicht, gevolgen en beveiligingstipsCyberaanvallen: Overzicht, gevolgen en beveiligingstips
Cyberaanvallen: Overzicht, gevolgen en beveiligingstipsCombell NV
 
Hoe gebruik je het resellerplatform als partner van Combell
Hoe gebruik je het resellerplatform als partner van CombellHoe gebruik je het resellerplatform als partner van Combell
Hoe gebruik je het resellerplatform als partner van CombellCombell NV
 
Hoe laat je jouw website scoren in zoekmachines zoals Google
Hoe laat je jouw website scoren in zoekmachines zoals GoogleHoe laat je jouw website scoren in zoekmachines zoals Google
Hoe laat je jouw website scoren in zoekmachines zoals GoogleCombell NV
 
Een webshop bouwen in WooCommerce – advanced sessie
Een webshop bouwen in WooCommerce – advanced sessieEen webshop bouwen in WooCommerce – advanced sessie
Een webshop bouwen in WooCommerce – advanced sessieCombell NV
 
Hoe start je een webshop met WordPress / WooCommerce
Hoe start je een webshop met WordPress / WooCommerceHoe start je een webshop met WordPress / WooCommerce
Hoe start je een webshop met WordPress / WooCommerceCombell NV
 
Keeping the cloud in check cvodmd
Keeping the cloud in check cvodmdKeeping the cloud in check cvodmd
Keeping the cloud in check cvodmdCombell NV
 
Hybrid cloud wiskyweb2012
Hybrid cloud wiskyweb2012Hybrid cloud wiskyweb2012
Hybrid cloud wiskyweb2012Combell NV
 
2012 03-27 developers e-commercedag presentatie5 ssl
2012 03-27 developers e-commercedag presentatie5 ssl2012 03-27 developers e-commercedag presentatie5 ssl
2012 03-27 developers e-commercedag presentatie5 sslCombell NV
 
2012 03-27 developers e-commercedag presentatie2 drupal
2012 03-27 developers e-commercedag presentatie2 drupal2012 03-27 developers e-commercedag presentatie2 drupal
2012 03-27 developers e-commercedag presentatie2 drupalCombell NV
 
2012 03-27 developers e-commercedag presentatie1 magento
2012 03-27 developers e-commercedag presentatie1 magento2012 03-27 developers e-commercedag presentatie1 magento
2012 03-27 developers e-commercedag presentatie1 magentoCombell NV
 
2012 03-27 developers e-commercedag presentatie4 ogone
2012 03-27 developers e-commercedag presentatie4 ogone2012 03-27 developers e-commercedag presentatie4 ogone
2012 03-27 developers e-commercedag presentatie4 ogoneCombell NV
 
10 doe-het-zelf tips om aan e-commerce te doen
10 doe-het-zelf tips om aan e-commerce te doen10 doe-het-zelf tips om aan e-commerce te doen
10 doe-het-zelf tips om aan e-commerce te doenCombell NV
 
Develop and deploy using Hybrid Cloud Strategies confoo2012
Develop and deploy using Hybrid Cloud Strategies confoo2012Develop and deploy using Hybrid Cloud Strategies confoo2012
Develop and deploy using Hybrid Cloud Strategies confoo2012Combell NV
 
Php through the eyes of a hoster confoo
Php through the eyes of a hoster confooPhp through the eyes of a hoster confoo
Php through the eyes of a hoster confooCombell NV
 
Hybrid Cloud PHPUK2012
Hybrid Cloud PHPUK2012Hybrid Cloud PHPUK2012
Hybrid Cloud PHPUK2012Combell NV
 
2012 02-07 sql denali presentatie microsoft
2012 02-07 sql denali presentatie microsoft2012 02-07 sql denali presentatie microsoft
2012 02-07 sql denali presentatie microsoftCombell NV
 

Mais de Combell NV (20)

Play it extra safe! Kies een goede cyberverzekering
Play it extra safe! Kies een goede cyberverzekeringPlay it extra safe! Kies een goede cyberverzekering
Play it extra safe! Kies een goede cyberverzekering
 
Hoe gebruik je het resellerplatform als partner van Combell
Hoe gebruik je het resellerplatform als partner van CombellHoe gebruik je het resellerplatform als partner van Combell
Hoe gebruik je het resellerplatform als partner van Combell
 
Managed WordPress bij Combell – wat doet dat precies?
Managed WordPress bij Combell – wat doet dat precies?Managed WordPress bij Combell – wat doet dat precies?
Managed WordPress bij Combell – wat doet dat precies?
 
Back-ups: Hoe ze je kunnen redden van een cyberaanval
Back-ups: Hoe ze je kunnen redden van een cyberaanvalBack-ups: Hoe ze je kunnen redden van een cyberaanval
Back-ups: Hoe ze je kunnen redden van een cyberaanval
 
Cyberaanvallen: Overzicht, gevolgen en beveiligingstips
Cyberaanvallen: Overzicht, gevolgen en beveiligingstipsCyberaanvallen: Overzicht, gevolgen en beveiligingstips
Cyberaanvallen: Overzicht, gevolgen en beveiligingstips
 
Hoe gebruik je het resellerplatform als partner van Combell
Hoe gebruik je het resellerplatform als partner van CombellHoe gebruik je het resellerplatform als partner van Combell
Hoe gebruik je het resellerplatform als partner van Combell
 
Hoe laat je jouw website scoren in zoekmachines zoals Google
Hoe laat je jouw website scoren in zoekmachines zoals GoogleHoe laat je jouw website scoren in zoekmachines zoals Google
Hoe laat je jouw website scoren in zoekmachines zoals Google
 
Een webshop bouwen in WooCommerce – advanced sessie
Een webshop bouwen in WooCommerce – advanced sessieEen webshop bouwen in WooCommerce – advanced sessie
Een webshop bouwen in WooCommerce – advanced sessie
 
Hoe start je een webshop met WordPress / WooCommerce
Hoe start je een webshop met WordPress / WooCommerceHoe start je een webshop met WordPress / WooCommerce
Hoe start je een webshop met WordPress / WooCommerce
 
Keeping the cloud in check cvodmd
Keeping the cloud in check cvodmdKeeping the cloud in check cvodmd
Keeping the cloud in check cvodmd
 
Hybrid cloud wiskyweb2012
Hybrid cloud wiskyweb2012Hybrid cloud wiskyweb2012
Hybrid cloud wiskyweb2012
 
2012 03-27 developers e-commercedag presentatie5 ssl
2012 03-27 developers e-commercedag presentatie5 ssl2012 03-27 developers e-commercedag presentatie5 ssl
2012 03-27 developers e-commercedag presentatie5 ssl
 
2012 03-27 developers e-commercedag presentatie2 drupal
2012 03-27 developers e-commercedag presentatie2 drupal2012 03-27 developers e-commercedag presentatie2 drupal
2012 03-27 developers e-commercedag presentatie2 drupal
 
2012 03-27 developers e-commercedag presentatie1 magento
2012 03-27 developers e-commercedag presentatie1 magento2012 03-27 developers e-commercedag presentatie1 magento
2012 03-27 developers e-commercedag presentatie1 magento
 
2012 03-27 developers e-commercedag presentatie4 ogone
2012 03-27 developers e-commercedag presentatie4 ogone2012 03-27 developers e-commercedag presentatie4 ogone
2012 03-27 developers e-commercedag presentatie4 ogone
 
10 doe-het-zelf tips om aan e-commerce te doen
10 doe-het-zelf tips om aan e-commerce te doen10 doe-het-zelf tips om aan e-commerce te doen
10 doe-het-zelf tips om aan e-commerce te doen
 
Develop and deploy using Hybrid Cloud Strategies confoo2012
Develop and deploy using Hybrid Cloud Strategies confoo2012Develop and deploy using Hybrid Cloud Strategies confoo2012
Develop and deploy using Hybrid Cloud Strategies confoo2012
 
Php through the eyes of a hoster confoo
Php through the eyes of a hoster confooPhp through the eyes of a hoster confoo
Php through the eyes of a hoster confoo
 
Hybrid Cloud PHPUK2012
Hybrid Cloud PHPUK2012Hybrid Cloud PHPUK2012
Hybrid Cloud PHPUK2012
 
2012 02-07 sql denali presentatie microsoft
2012 02-07 sql denali presentatie microsoft2012 02-07 sql denali presentatie microsoft
2012 02-07 sql denali presentatie microsoft
 

Último

Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 

Último (20)

Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 

Cli the other SAPI confoo11