Difference between revisions of "PHP"

From wiki
Jump to navigation Jump to search
 
(27 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
[[Category:PHP]]
 
[[Category:PHP]]
 +
[[category:Webdesign]]
 +
=Basics=
 
Script language for dynamic web-pages. The syntax and concepts used are similar to [[Perl]]
 
Script language for dynamic web-pages. The syntax and concepts used are similar to [[Perl]]
 +
 +
;Limited number of loops
 +
<syntaxhighlight lang=php>
 +
for ($i = 0; $i <= 6; $i++) {
 +
  echo "Loop number: $i ";
 +
}
 +
</syntaxhighlight>
 +
 +
;escapeshellcmd(shellcommand)
 +
:Return the shellcommand with everything that might confuse the shell escaped.
 +
;exec(<cmd>,<outputarray>,<returnvar>)
 +
:Executed <cmd> in the shell, append the command output to he array <outputarray> and set <returnvar> to the returnvalue of the command.
 +
:Also the last line of the command output is returned
 +
;shell_exec(<cmd>)
 +
:Execute <cmd> (output from excapedshellcmd) in the shell, return the command output.
 +
 +
;<nowiki>date("Y-m-d h:i:s")</nowiki>
 +
:Current timestamp (YYYY-mm-dd HH:MM:SS).
 +
:Format "U" is [https://duckduckgo.com/?q=unixtime unixtime] (seconds since epoch)
 +
;sprintf("%7.2f", $float )
 +
:Format a number (7 digits, 2 decimals)
 +
;number_format($number, 2, '.', ',')
 +
:Format $number with 2 decimals, . as decimal separator and , as thousand separator.
 +
 +
;strpos($string, $search,$start)
 +
:Return position of $search exists in $string. When it is not in, return FALSE. Start searching at position $start (optional). Simple test on strpos - <code>if (strpos(x,y)) {}</code> - does not differ between position 0 and FALSE. Test on position 2 or count from the end by setting $start to a negative value (possible since PHP7.1).
 +
;str_replace($old, $new, $string)
 +
:Return $string with $old replaced by $new
 +
;trim($string, 'abc')
 +
:Remove characters a, b and c from the start and the end of $string. If no characters are specified all whitespace will be removed.
 +
 +
;round($float,<precision>)
 +
:Round $float to <precision> decimals (0 is default)
 +
 +
=Regular expressions=
 +
PHP is Perl-like, patterns need delimiters (default is /<pattern>/ )
 +
;preg_match($pattern, $string)
 +
:Return 1 if $pattern exists in $string
 +
;preg_split('/\s*\=+\s*/',$string
 +
:Split $string into an array on a pattern (in this example on white-spaces and equality signs.
 +
;preg_replace('/#.*$/','',$string);
 +
:Replace matches with the pattern in $string (in this example to remove comments from a line)
 +
 +
=Files=
 +
Almost all you need to know about files. For writing open with 'w' and fwrite($fh,$line)
 +
<syntaxhighlight lang=php>
 +
$fh = fopen($filename, 'r') or die('Unable to open '.$file);
 +
while(!feof($fh)) {
 +
  $line =  fgets($fh);
 +
}
 +
fclose($fh)
 +
</syntaxhighlight>
  
 
=Functions=
 
=Functions=
  
Function have global scope, you do not need to declare them before calling
+
All variables are local to the function. You have to pass everything it needs, or declare variables as GLOBAL
  
 
<syntaxhighlight lang=php>
 
<syntaxhighlight lang=php>
  
<?php
 
 
function func1($arg1, $arg2)
 
function func1($arg1, $arg2)
 
{
 
{
 +
    GLOBAL $vardeclaredoutside
 
     <codeblock>
 
     <codeblock>
 
     return $value;
 
     return $value;
 
}
 
}
?>
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 +
Only one value can be returned but you can return arrays.
 +
 +
<syntaxhighlight lang=php>
 +
 +
function func1()
 +
{
 +
    <codeblock>
 +
    return array ($value1, $value2);
 +
}
 +
 +
list($val1,$val2) = func1();
 +
</syntaxhighlight>
 +
 +
=Arrays=
 +
 +
;arr = []
 +
:(Create) empty array
 +
 +
;arr1 = [val1, val2, val3]
 +
;arr1 = array(val1, val2, val3)
 +
:Create an indexed array. The keys are the range 0..arraylength.
 +
 +
;array_push($arr1,val1,val2)
 +
:Add elements val1 and val2 to the end of $arr1
 +
 +
;$arr1 = array(key1=>val1, key2=>val2, key3=>val3)
 +
;$arr2[key1] = val1
 +
:Create an associative array (like a [[Perl#Hashes]] or a [[Python:DataTypes#Dictionary_or_dict|Python dictionay]])
 +
 +
;count($arr1)
 +
:Return the number of elements (length) of an array
 +
 +
;end($arr1)
 +
:Return the value of the last element in $arr1 and set the pointer to it.
 +
 +
;join(',',$arr1)
 +
:Join elements in arr1 with ',' as separator.
 +
 +
;foreach($arr1 as $value) { codeblock }
 +
:Loop over an indexed array
 +
 +
;foreach($arr1 as $key => $value) { codeblock }
 +
:Loop over an associative array
 +
 +
;unset($arr1[key])
 +
:Remove the key element from $array. Numerical keys will not be reindexed.
  
 
=Install=
 
=Install=
Line 24: Line 123:
 
:Fix php security by editing <code>/etc/php/7.0/fpm/php.ini</code>
 
:Fix php security by editing <code>/etc/php/7.0/fpm/php.ini</code>
 
:Uncomment line with cgi.fix_pathinfo and set it to 0
 
:Uncomment line with cgi.fix_pathinfo and set it to 0
 +
 +
==php7.4 not in repository==
 +
<syntaxhighlight lang=bash>
 +
apt -y install lsb-release apt-transport-https ca-certificates
 +
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
 +
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
 +
sudo apt update
 +
sudo apt -y install php7.4
 +
php -v
 +
</syntaxhighlight>

Latest revision as of 22:52, 7 October 2023

Basics

Script language for dynamic web-pages. The syntax and concepts used are similar to Perl

Limited number of loops
 
for ($i = 0; $i <= 6; $i++) {
  echo "Loop number: $i ";
}
escapeshellcmd(shellcommand)
Return the shellcommand with everything that might confuse the shell escaped.
exec(<cmd>,<outputarray>,<returnvar>)
Executed <cmd> in the shell, append the command output to he array <outputarray> and set <returnvar> to the returnvalue of the command.
Also the last line of the command output is returned
shell_exec(<cmd>)
Execute <cmd> (output from excapedshellcmd) in the shell, return the command output.
date("Y-m-d h:i:s")
Current timestamp (YYYY-mm-dd HH:MM:SS).
Format "U" is unixtime (seconds since epoch)
sprintf("%7.2f", $float )
Format a number (7 digits, 2 decimals)
number_format($number, 2, '.', ',')
Format $number with 2 decimals, . as decimal separator and , as thousand separator.
strpos($string, $search,$start)
Return position of $search exists in $string. When it is not in, return FALSE. Start searching at position $start (optional). Simple test on strpos - if (strpos(x,y)) {} - does not differ between position 0 and FALSE. Test on position 2 or count from the end by setting $start to a negative value (possible since PHP7.1).
str_replace($old, $new, $string)
Return $string with $old replaced by $new
trim($string, 'abc')
Remove characters a, b and c from the start and the end of $string. If no characters are specified all whitespace will be removed.
round($float,<precision>)
Round $float to <precision> decimals (0 is default)

Regular expressions

PHP is Perl-like, patterns need delimiters (default is /<pattern>/ )

preg_match($pattern, $string)
Return 1 if $pattern exists in $string
preg_split('/\s*\=+\s*/',$string
Split $string into an array on a pattern (in this example on white-spaces and equality signs.
preg_replace('/#.*$/',,$string);
Replace matches with the pattern in $string (in this example to remove comments from a line)

Files

Almost all you need to know about files. For writing open with 'w' and fwrite($fh,$line)

$fh = fopen($filename, 'r') or die('Unable to open '.$file);
while(!feof($fh)) {
  $line =  fgets($fh);
}
fclose($fh)

Functions

All variables are local to the function. You have to pass everything it needs, or declare variables as GLOBAL

function func1($arg1, $arg2)
{
    GLOBAL $vardeclaredoutside
    <codeblock>
    return $value;
}

Only one value can be returned but you can return arrays.

function func1()
{
    <codeblock>
    return array ($value1, $value2);
}

list($val1,$val2) = func1();

Arrays

arr = []
(Create) empty array
arr1 = [val1, val2, val3]
arr1 = array(val1, val2, val3)
Create an indexed array. The keys are the range 0..arraylength.
array_push($arr1,val1,val2)
Add elements val1 and val2 to the end of $arr1
$arr1 = array(key1=>val1, key2=>val2, key3=>val3)
$arr2[key1] = val1
Create an associative array (like a Perl#Hashes or a Python dictionay)
count($arr1)
Return the number of elements (length) of an array
end($arr1)
Return the value of the last element in $arr1 and set the pointer to it.
join(',',$arr1)
Join elements in arr1 with ',' as separator.
foreach($arr1 as $value) { codeblock }
Loop over an indexed array
foreach($arr1 as $key => $value) { codeblock }
Loop over an associative array
unset($arr1[key])
Remove the key element from $array. Numerical keys will not be reindexed.

Install

On debian (and its derivates)

apt-get install php-fpm php-mysql
Install php7 and mysql support
Fix php security by editing /etc/php/7.0/fpm/php.ini
Uncomment line with cgi.fix_pathinfo and set it to 0

php7.4 not in repository

apt -y install lsb-release apt-transport-https ca-certificates
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
sudo apt update
sudo apt -y install php7.4
php -v