bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


Barra lateral

ASIX Administració de Sistemes Informàtics i Xarxes
Tots els mòduls del cicle
MP01 Implantació de sistemes operatius
Totes les UFs del modul
MP02 Gestió de bases de dades
Totes les UFs del modul
MP03 Programació bàsica
Totes les UFs del modul
MP04 Llenguatges de marques i sistemes de gestió d'informació
Totes les UFs del modul
MP05 Fonaments de maquinari
Totes les UFs del modul
MP06 Administració de sistemes operatius
Totes les UFs del modul
MP07 Planificació i administració de xarxes
Totes les UFs del modul
MP08 Serveis de xarxa i Internet
Totes les UFs del modul
MP09 Implantació d'aplicacions web
Totes les UFs del modul
MP10 Administració de sistemes gestors de bases de dades
Totes les UFs del modul
MP11 Seguretat i alta disponibilitat
Totes les UFs del modul
MP12 Formació i orientació laboral
Totes les UFs del modul
MP13 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP14 Projecte
Totes les UFs del modul
DAM Desenvolupament d’aplicacions multiplataforma
Tots els mòduls del cicle
MP01 Sistemes informàtics
Totes les UFs del modul
MP02 Bases de dades
Totes les UFs del modul
MP03 Programació bàsica
Totes les UFs del modul
MP04 Llenguatges de marques i sistemes de gestió d'informació
Totes les UFs del modul
MP05 Entorns de desenvolupament
Totes les UFs del modul
MP06 Accés a dades
Totes les UFs del modul
MP07 Desenvolupament d’interfícies
Totes les UFs del modul
MP08 Programació multimèdia i dispositius mòbils
Totes les UFs del modul
MP09 Programació de serveis i processos
Totes les UFs del modul
MP10 Sistemes de gestió empresarial
Totes les UFs del modul
MP11 Formació i orientació laboral
Totes les UFs del modul
MP12 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP13 Projecte de síntesi
Totes les UFs del modul
MPDual Mòdul Dual / Projecte
DAW Desenvolupament d’aplicacions web
Tots els mòduls del cicle
MP01 Sistemes informàtics
Totes les UFs del modul
MP02 Bases de dades
Totes les UFs del modul
MP03 Programació
Totes les UFs del modul
MP04 Llenguatge de marques i sistemes de gestió d’informació
Totes les UFs del modul
MP05 Entorns de desenvolupament
Totes les UFs del modul
MP06 Desenvolupament web en entorn client
Totes les UFs del modul
MP07 Desenvolupament web en entorn servidor
Totes les UFs del modul
MP08 Desplegament d'aplicacions web
Totes les UFs del modul
MP09 Disseny d'interfícies web
Totes les UFs del modul
MP10 Formació i Orientació Laboral
Totes les UFs del modul
MP11 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP12 Projecte de síntesi
Totes les UFs del modul
SMX Sistemes Microinformàtics i Xarxes
Tots els mòduls del cicle
MP01 Muntatge i manteniment d’equips
Totes les UFs del modul
MP02 Sistemes Operatius Monolloc
Totes les UFs del modul
MP03 Aplicacions ofimàtiques
Totes les UFs del modul
MP04 Sistemes operatius en xarxa
Totes les UFs del modul
MP05 Xarxes locals
Totes les UFs del modul
MP06 Seguretat informàtica
Totes les UFs del modul
MP07 Serveis de xarxa
Totes les UFs del modul
MP08 Aplicacions Web
Totes les UFs del modul
MP09 Formació i Orientació Laboral
Totes les UFs del modul
MP10 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP11 Anglès
Totes les UFs del modul
MP12 Síntesi
Totes les UFs del modul
CETI Ciberseguretat en Entorns de les Tecnologies de la Informació
Tots els mòduls del cicle
php

PHP

PHP és el llenguatge de programació web entorn servidor més popular des de fa molts anys. La web de referència és http://php.net i on haurem de consultar de forma oficial sempre que tinguem dubtes.

Les sigles PHP ténen el què es coneix per definició recursiva. «PHP» significa, literalment, «PHP Hypertext Preprocessor».

Aquest article està pensat per a gent que coneix les bases de la programació i que s'està iniciant en l'àmbit web, pel què no ens detindrem en conceptes de variable, funció, array, diccionari/map, etc. sinó que suposem que es coneixen prèviament.

Referències


Instal·lació de PHP i primeres passes

Treballarem PHP sobre GNU/Linux Debian/Ubuntu. Instal·lar PHP és tan fàcil i obvi com: $ sudo apt install php

En aquest article no necessitem parar massa atenció a les versions ja que treballarem amb els bàsics del llenguatge, però si estem instal·lant programari tipus CMS i similars caldrà que revisem bé la versió instal·lada i les llibreries afegides.

PHP es pot executar de diferents maneres:

  • Sobre un servidor web, típicament Apache o Nginx. És l'entorn més habitual de treball.
  • Amb un servidor web intern o embedded que porta incorporat el propi intèrpret de PHP. Va molt bé per fer proves i no haver d'instal·lar arxius a les carpetes de sistema on treballa Apache.
  • En una consola de PHP en mode interactiu, es sol obrir amb php -a


Variables

Les variables en PHP van sempre precedides del símbol $.

PHP és un llenguatge de tipatge dinàmic, el què significa que una variable pot canviar el seu tipus de dades en temps d'execució. És una característica habitual dels llenguatges interpretats (i no gens habitual en els llenguatges compilats).

Entrem en la consola en mode interactiu per fer les primeres proves amb php -a:

$ php -a
Interactive mode enabled

php > $a = 1;
php > echo $a;
1
php > var_dump($a);
int(1)
php > $a = "hola";
php > echo $a;
hola
php > var_dump($a);
string(4) "hola"
php > echo gettype($a);
string

Instruccions vistes:

  • echo
  • var_dump
  • gettype

Respon:

  • Què fa cadascuna d'elles?
  • Quina diferència hi ha entre var_dump i print_r ?


Strings

Els strings o cadenes de caràcters mereixen un parell de comentaris abans de continuar.

Per mostrar text (que és la operació més habitual en PHP ja que la seva principal missió és construir un HTML) utilitzem echo i posem el text entre cometes dobles o simples. Ambdues funcionen, però tenen efectes diferents:

  • Cometes dobles: interpreten el contingut del string i substitueixen les variables que hi pugui haver.
  • Cometes simples: no interpreten el contingut i el mostren «tal qual és».

Exemple:

php > $usuari = "Enric";
 
php > echo "Hola, $usuari";
Hola, Enric
 
php > echo 'Hola, $usuari';
Hola, $usuari

Com podem veure, un mostra el contingut de la variable (Enric) i l'altre no.

També funciona amb arrays (ho veurem més endavant).

Concatenació de strings

Podem concatenar strings i variables amb el caràcter punt (.)

Per exemple, el què hem fet abans ho podem fer també així:

php > echo "Hola, ".$usuari;
Hola, Enric

D'acord que es pot posar la variable dins de les cometes dobles i ens apareixerà, però sovint és més clar a l'hora de llegir el codi concatenar amb el punt i així també el syntax highlight de l'editor ens ressaltarà de forma més clara què estem fent.

Escape

A més, és molt comú necessitar fer escape de determinats caràcters com l'apòstrof. Si estem utilitzant cometes simples i necessitem escriure un apòstrof (és el mateix caràcter) podem escapar amb una contrabarra i es mostrarà l'apòstrof.

php > echo 'Vivim a l'Hospitalet';
php ' 
php ' ';
PHP Parse error:  syntax error, unexpected 'Hospitalet' (T_STRING), expecting ';' or ',' in php shell code on line 1
php > echo 'Vivim a l\'Hospitalet';
Vivim a l'Hospitalet

Com podem veure, l'apòstrof em tanca el string i llavors em dona un error (a part de liar la consola). Si necessito un apòstrof entre cometes simples, utilitzem la contrabarra (escape) abans.

Combinació de cometes

Com que sovint estem construint un HTML amb PHP, es dona que per aconseguir un doc del tipus HTML ens convé utilitzar una combinació de cometes simples i dobles. Per exemple, per aconseguir això:

<input type="text" name="nom" />

La forma més fàcil per fer-ho seria aquesta:

echo '<input type="text" name="nom" />';

Però si volem ficar pel mig alguna variable, les cometes simples no ens deixaran fer-ho dins del string. Per tant, serà més fàcil fer les cometes simples dins del HTML:

echo "<input type='text' name='nom' value='$nom_usuari' />";

Com alternativa, o si volem fer servir cometes simples, haurem de concatenar:

echo '<input type="text" name="nom" value="'.$nom_usuari.'" />';


Servidor intern PHP

Ara treballarem amb el servidor intern de PHP (mes tard ja veurem com treballar amb Apache).

Crearem una carpeta php1 en el nostre home directory on hi posarem els arxius PHP (en aquest exemple creem un arxiu index.php) i posem en marxa el servidor:

$ mkdir php1
$ cd php1
$ echo "<h1>PHP quick</h1>" > index.php
$ php -S 0:8080
[Thu Sep  9 16:45:10 2021] PHP 7.4.9 Development Server (http://0:8081) started
...

Ara podem apuntar el browser al port 8080 de la nostra màquina per veure si es mostra alguna cosa:

http://localhost:8080

Per visualitzar la web cal mantenir la shell oberta. Si la parem, el servidor intern es pararà i no deixarem de tenir disponible la web.


Primera pàgina PHP

Edita index.php i ara posa-hi aquest contingut:

<p>En un arxiu PHP es comença escrivint en HTML</p>

<?php
# dins el tag ?php podem escriure codi incrustat
# comentaris amb el sostingut #

echo "<p>Aquesta línia l'hem escrita en PHP</p>";
?>

<p style="color:orange;">Aquesta línia torna a ser HTML</p>

Accedeix amb el navegador a localhost:8080 i observa el resultat i el codi generat amb CTRL+U.

Utilitzar CTRL+U és una eina imprescindible per veure quin és el codi que hem generat finalment després de l'execució del PHP.


Mostrar els errors del codi

Si introduïm errors al nostre codi no es veuran al navegador. Això és habitual ja que si la nostra web té algun error no volem mostrar-ho a l'usuari «tal qual», sinó que hauriem de fer algun post-processament del tipus captura d'excepcions, etc.

A més, mostrar els errors del nostre codi pot oferir informació interna de la nostra web que la podrien fer vulnerable a usuaris malintencionats ja que revela com està feta la web.

Per veure els errors podem mirar la consola. Introdueix algun error a la part PHP (per exemple, afegeix una línia amb lletres aleatòries) i visualitza per veure com va.

Si igualment vols fer mostrar els errors al browser, pots introduir aquestes línies a l'inici del codi PHP:

# codi PHP per mostrar els errors al browser
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);


Segueix el curs bàsic de PHP

Segueix el curs bàsic de PHP a cacauet.org

En particular, para atenció a la creació de formularis GET.

Fes la pràctica de la fórmula de resolució de l'equació de 2n grau.

Tens referències interessants a les pàgines de W3Schools:

Un particular i útil exemple per utilitzar arrays amb els checkboxes, ideal per fer un menú d'opcions a sel·leccionar.


Estructures de dades

En els llenguatges interpretats moderns com Python o Javascript es solen utilitzar dues estructures bàsiques molt importants (amb diverses variacions):

  • arrays o llistes
  • diccionaris o arrays associatius

Arrays i llistes

Els arrays ja sabem que son conjunts de dades estructurats de forma consecutiva. Això era veritat en llenguatges compilats com C/C++ o Java, però en PHP o Python ja no és així ben bé. La primera diferència és que els arrays de llenguatges compilats han de ser del mateix tipus de dades, i son estàtics. En canvi, els arrays en PHP o Python poden contenir elements heterogenis (strings, sencers i floats barrejats), i que son estructures dinàmiques (tipus llista) on podem afegir i eliminar elements.

Es pot definir i inicialitzar un array de diverses maneres, bàsicament aquestes:

$a = [];                  # array buit
$b = array();
$c = ["gos","gat"];       # array inicialitzat amb 2 elements
$d = array("gos","gat");

Prova d'inicialitzar arrays utilitzant la consola de PHP amb php -a i visualitzar els continguts amb var_dump.

Per afegir elements a un array es pot fer amb la funció array_push o amb els claudàtors [ ]:

$a = ["gos","gat"];
array_push($a,"elefant");
$a[] = "jirafa";
var_dump($a);
array(4) {
  [0]=>
  string(3) "gos"
  [1]=>
  string(3) "gat"
  [2]=>
  string(7) "elefant"
  [3]=>
  string(6) "jirafa"
}

Com es pot veure, els índexs de l'array s'incrementen correlativament.

Per esborrar un element d'un array, es pot fer amb la instrucció unset:

php > unset( $a[2] );
php > var_dump($a);
array(3) {
  [0]=>
  string(3) "gos"
  [1]=>
  string(3) "gat"
  [3]=>
  string(6) "jirafa"
}

Primera cosa sorprenent de PHP: quan s'esborra un element d'un array, els índexs no es renumeren. En aquest exemple, a l'esborrar l'element 2, els índexs que queden son 0,1,3 (sense el 2).

Si volem redefinir els índexs, ho podem fer amb la instrucció array_values(), i el índexs tornaran a ser correlatius:

php > $b = array_values($a);
php > var_dump($b);
array(3) {
  [0]=>
  string(3) "gos"
  [1]=>
  string(3) "gat"
  [2]=>
  string(6) "jirafa"
}

Al tanto, que com podeu veure en realitat no es reordena l'array inicial, sinó que es crea un de nou ($b) amb els índexs ordenats.

Diccionaris o Arrays Associatius

L'altra estructura de dades superutilitzada és el diccionari o array associatiu. Aquest es defineix com un array al que accedim mitjançant una clau. Per tant, un array associatiu serà un conjunt de parells clau/valor.

En PHP els arrays associatius es poden definir similarment a l'array posicional, però ara definint els índexs amb la fletxa (⇒) i accedint amb claudàtors (tant per escriure com per llegir):

php > $sons = [ "gos" => "bup" , "gat" => "miau" ];
php > var_dump($sons);
array(2) {
  ["gos"]=>
  string(3) "bup"
  ["gat"]=>
  string(4) "miau"
}
php > echo $sons["gat"];
miau

I afegim elements de forma similar a Python o Javascript

php > var_dump($sons);
array(3) {
  ["gos"]=>
  string(3) "bup"
  ["gat"]=>
  string(4) "miau"
  ["vaca"]=>
  string(2) "mu"
}

La bottom line sobre arrays vs arrays associatius en PHP és que en realitat són la mateixa estructura de dades, i un array sempre es pot tractar com a array associatiu on els índexs son la clau.


Arxius

Si volem guardar dades en arxius en PHP, disposem de diverses funcions per a realitzar aquestes operacions:

Si volem guardar les dades d'un array, no tindrem prou amb aquestes funcions, ja que al guardar les dades d'un array les concatena totes juntes.

Per solventar-ho i poder guardar correctament les dades d'un array, utilitzem les funcions serialize i unserialize.

php > var_dump($sons);
array(3) {
  ["gos"]=>
  string(3) "bup"
  ["gat"]=>
  string(4) "miau"
  ["vaca"]=>
  string(2) "mu"
}
php > file_put_contents( "sons.txt", serialize($sons) );
php > $sons2 = unserialize( file_get_contents("sons.txt") );
php > var_dump($sons2);
array(3) {
  ["gos"]=>
  string(3) "bup"
  ["gat"]=>
  string(4) "miau"
  ["vaca"]=>
  string(2) "mu"
}

Examina l'arxiu «sons.txt» que has creat i explica què significa cada valor que hi apareix.

php.txt · Darrera modificació: 2021/09/29 09:40 (edició externa)