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 [2023/01/09 18:59]
enric_mieza_sanchez [Enviar emails]
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 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 430: Línia 435:
 \\ \\
  
-===== Més coses =====+===== 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 ====+ 
 +===== Carregar imatges =====
 Aquí tens un [[https://pqina.nl/blog/image-upload-with-php/|tutorial per carregar imatges en PHP]]. 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 ====+===== 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").
  
-  * [[https://netcorecloud.com/tutorials/send-an-email-via-gmail-smtp-server-using-php/|Enviar emails utilitzant SMTP Gmail amb PHP]]. 
  
 <WRAP todo> <WRAP todo>
-Utilitza el tutorial indicat més amunt per enviar un email. Fes un formulari que permeti ajustar destinatari, títol i contingut del missatge.+Fes un formulari que permeti enviar un email ajustant destinatari, títol i contingut del missatge.
  
-Per carregar les llibreries al vostre codi cal canviar els ''require'' que hi ha per: +Recorda emprar la [[https://github.com/PHPMailer/PHPMailer|doc oficial de PHPMailer]] i la contrasenya d'aplicació de Gmail (no la contrasenya normal).
-  require vendor/autoload.php+
  
-<WRAP important> 
-**Utilitza l'email de l'institut**. Un Gmail normal no et permetrà enviar emails amb autenticació usuari/password (el què anomenen //"less secure apps"//), ja que no compleix amb les mesures de seguretat mínimes. De moment, a data de gener de 2023, als comptes corporatius els permeten les //less secure apps//. 
-</WRAP> 
 </WRAP> </WRAP>
  
php.1673290782.txt.gz · Darrera modificació: 2023/01/09 18:59 per enric_mieza_sanchez