bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


php

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
php [2022/09/19 12:43]
enrique_mieza_sanchez [Exercicis]
php [2025/01/23 17:26] (actual)
enric_mieza_sanchez [Enviar emails]
Línia 21: Línia 21:
  
 Treballarem PHP sobre GNU/Linux Debian/Ubuntu. Instal·lar PHP és tan fàcil i obvi com: Treballarem PHP sobre GNU/Linux Debian/Ubuntu. Instal·lar PHP és tan fàcil i obvi com:
- $ sudo apt install php+  $ 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. 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.
Línia 347: Línia 347:
   - Utilitza l'exercici 4 dels taulells de jocs amb el nom de les files (lletres) i columnes (números).   - Utilitza l'exercici 4 dels taulells de jocs amb el nom de les files (lletres) i columnes (números).
   - Crea un array amb un submarí i mostra-ho al taulell.   - Crea un array amb un submarí i mostra-ho al taulell.
-    * Raona quines opcions tens per definir aquest element i quina té més avantatges.+    * Col·loca'l en una posició aleatòria cada cop que es carrega.
     * Comprova que funciona en horitzontal i vertical.     * Comprova que funciona en horitzontal i vertical.
 +    * Comprova que no surt dels límits de la quadrícula.
     * L'algorisme ha de funcionar amb qualsevol tipus de longitud de vaixell.     * L'algorisme ha de funcionar amb qualsevol tipus de longitud de vaixell.
-  - Crea un array amb un vaixell de cada tipus (fixe) i mostra-ho al taulell. +  - Pensa en 2 maneres diferents per definir una partida sencera amb diversos vaixells i justifica pros i contres. En concret es recomana analitzar //array// de vaixells vs matriu de caselles. 
-  - Crea un array amb tota una **partida amb valors aleatoris**: 4 fragates, 3 submarins, 2 destructors i 1 portaavions.+  - Crea una matriu per a la partida amb un vaixell de cada tipus (fixe) i mostra-ho al taulell. 
 +  - Omple ara la matriu amb tota una **partida amb valors aleatoris**: 4 fragates, 3 submarins, 2 destructors i 1 portaavions.
     * Els vaixells han de tenir col·locació aleatòria, incloent que puguin estar en vertical o en horitzontal.     * Els vaixells han de tenir col·locació aleatòria, incloent que puguin estar en vertical o en horitzontal.
     * Comprova que cada cop que recarregueu el tauler et surt una partida diferent.     * Comprova que cada cop que recarregueu el tauler et surt una partida diferent.
Línia 363: Línia 365:
 \\ \\
  
-===== Formularis i PHP =====+===== Formularis, GET, POST i PHP =====
  
 Referències bàsiques a W3Schools: Referències bàsiques a W3Schools:
Línia 370: Línia 372:
   * [[https://www.w3schools.com/html/html_form_input_types.asp|Tipus de input field]].   * [[https://www.w3schools.com/html/html_form_input_types.asp|Tipus de input field]].
   * [[https://www.w3schools.com/php/php_forms.asp|Gestió de les dades dels formularis en PHP]]   * [[https://www.w3schools.com/php/php_forms.asp|Gestió de les dades dels formularis en PHP]]
 +  * Per comprovar si certes variables $_GET o $_POST ens arriben, es sol emprar la [[https://www.php.net/manual/en/function.isset.php|funció isset() de PHP]]. Per exemple:<code php>if( isset($_POST["nom"]) ) {
 +    // codi a executar aquí...
 +}</code>
  
  
Línia 385: Línia 390:
  
 ===== Arxius ===== ===== Arxius =====
-Si volem guardar dades en arxius en PHP, disposem de diverses funcions per a realitzar aquestes operacions:+Si volem guardar dades en arxius en PHP, disposem de diverses funcions per a realitzar aquestes operacions
 + 
 +Funcions "a lo bèstia" (carreguen tot en RAM, oju peligru):
   * [[https://www.php.net/manual/es/function.file.php|file()]] : carrega tot un fitxer en un array (cada línia serà un element)   * [[https://www.php.net/manual/es/function.file.php|file()]] : carrega tot un fitxer en un array (cada línia serà un element)
   * [[https://www.php.net/manual/es/function.file-put-contents.php|file_put_contents()]] : guarda les dades en un arxiu.   * [[https://www.php.net/manual/es/function.file-put-contents.php|file_put_contents()]] : guarda les dades en un arxiu.
   * [[https://www.php.net/manual/es/function.file-get-contents.php|file_get_contents()]] : carrega les dades d'un arxiu sencer sobre un //string//.   * [[https://www.php.net/manual/es/function.file-get-contents.php|file_get_contents()]] : carrega les dades d'un arxiu sencer sobre un //string//.
 +
 +Funcions més "fines":
 +  * [[https://www.w3schools.com/php/func_filesystem_fopen.asp|fopen]] : per obrir un arxiu. Recordeu que hi ha els modes de lectura (r), (sobre)escriptura (w) i afegir (a).
 +  * [[https://www.w3schools.com/php/func_filesystem_fgets.asp|fgets]] : carrega 1 sola línia d'un arxiu. Cal utilitzar-la en combinació amb ''fopen''.
 +  * [[https://www.w3schools.com/php/func_filesystem_fwrite.asp|fputs]] o [[https://www.w3schools.com/php/func_filesystem_fwrite.asp|fwrite]] (són sinònims): escriu
 +
 +
  
 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. 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.
Línia 418: Línia 432:
  
 Examina l'arxiu "sons.txt" que has creat i explica què significa cada valor que hi apareix. Examina l'arxiu "sons.txt" que has creat i explica què significa cada valor que hi apareix.
 +
 +\\
 +
 +===== Sessions =====
 +Les sessions ens faciliten que cada usuari pugui disposar d'una àrea per emmagatzemar variables: la variable ''$_SESSION[]''.
 +
 +Aquest mecanisme utilitza les //cookies// del navegador web per identificar l'usuari que es connecta a cada //request//.
 +
 +[[https://www.w3schools.com/php/php_sessions.asp|PHP Sessions a W3Schools]].
 +
 +\\
 +
 +
 +===== Carregar imatges =====
 +Aquí tens un [[https://pqina.nl/blog/image-upload-with-php/|tutorial per carregar imatges en PHP]].
 +
 +També es poden [[https://www.php.net/manual/en/features.file-upload.multiple.php|enviar múltiples arxius]] en un sol //input field//.
 +
 +<WRAP todo>
 +  - Implementa una pàgina de càrrega d'imatges al teu servidor en producció.
 +  - Visualitza les imatges carregades.
 +  - Afegeix un camp de descripció per a la imatge. Les imatges s'han de mostrar amb la seva descripció al costat o a sota.
 +  - Arranja-ho perquè permeti la càrrega de vídeos.<WRAP tip>Per augmentar el límit de dades que pot carregar PHP, hauràs de modificar l'arxiu ''php.ini'' i ampliar les variables ''max_upload_size'' i ''post_max_size''.</WRAP>
 +</WRAP>
 +
 +\\
 +
 +===== Enviar emails =====
 +
 +Disposar d'un servidor d'email s'ha convertit en una tasca complicada degut a les grans quantitats de Spam que circulen. Disposar d'un servidor de [[correu electrònic]] que passi els controls //antispam// és força complicat. Podeu conèixer mes detalls a l'article [[email Linux Docker]].
 +
 +Disposem, al menys, de dos maneres de fer-ho:
 +  - Tenint un **servidor d'email local com postfix** i enviant mitjançant la [[https://www.php.net/manual/es/function.mail.php|comanda PHP mail()]].
 +  - Utilitzant la [[https://github.com/PHPMailer/PHPMailer|biblioteca PHPMailer]]: amb aquesta llibreria podem enviar mitjançant un servidor extern (caldran credencials).
 +
 +\\
 +
 +==== Opció 1: des d'un servidor ====
 +En aquesta modalitat enviarem l'email des de la mateixa màquina on s'està executant el PHP. Ens caldrà un programari de MTA com Postfix. Podeu llegir mes teoria sobre [[correu electrònic]] en aquesta wiki.
 +
 +És important que tinguem obert el port 25 de sortida. Tots els servidors de Cloud ho estan limitant per evitar //spammers//, i cal demanar un permís especial perquè funcioni (habitualment al servei de suport mitjançant ticket).
 +
 +Si disposem d'aquest servidor resulta relativament senzill.
 +
 +Instal·lem postfix i mailutils:
 +  $ sudo apt install postfix mailutils
 +
 +Chequejem la instal·lació enviant un email:
 +  $ mail [email protected]
 +  Cc:
 +  Subject: prova de correu
 +  aqui poso el text de l'email
 +  pot tenir diverses línies
 +  acabem l'email amb un "." o bé amb CTRL+D
 +
 +...i s'enviarà l'email. Comproveu la carpeta de Spam perquè probablement vagi a parar allà.
 +
 +\\
 +
 +==== Opció 2: PHPMailer lib ====
 +Amb la [[https://github.com/PHPMailer/PHPMailer|biblioteca de codi PHPMailer]] podem enviar mitjançant un servidor extern (caldran credencials).
 +
 +  - **Utilitza les "contrasenyes d'aplicació" de Gmail**: no es pot fer servir la contrasenya "normal" del compte Gmail per enviar emails via SMTP des d'una app com la nostra en PHP. Cal crear una "App Password".
 +    - Entrar al compte de Gmail, "configuració del compte" -> secció "Seguretat".
 +    - Activar el doble factor d'autenticació (2FA).
 +    - Anar a la secció "Contrasenyes d'Aplicació" (o similar) i crear-ne una. Fes servir la casella de cerca si no veus la opció.
 +  - Instal·lar el [[https://getcomposer.org/download/|gestor de paquets composer per a PHP]].
 +    * Si estàs en GNU/Linux es recomana instal·lar l'arxiu ''composer'' a la carpeta ''~/bin''.
 +  - Seguir la [[https://github.com/PHPMailer/PHPMailer|documentació de PHPMailer]] per enviar un email (secció "A Simple Example").
 +
 +
 +<WRAP todo>
 +Fes un formulari que permeti enviar un email ajustant destinatari, títol i contingut del missatge.
 +
 +Recorda emprar la [[https://github.com/PHPMailer/PHPMailer|doc oficial de PHPMailer]] i la contrasenya d'aplicació de Gmail (no la contrasenya normal).
 +
 +</WRAP>
 +
 +\\
  
  
php.1663591436.txt.gz · Darrera modificació: 2022/09/19 12:43 per enrique_mieza_sanchez