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/16 14:25]
enrique_mieza_sanchez [Exercicis]
php [2024/10/03 15:32] (actual)
enric_mieza_sanchez [Arxius]
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 213: Línia 213:
 \\ \\
  
-===== Segueix el curs bàsic de PHP ===== 
-Segueix el [[https://cacauet.org/wiki/index.php/Curs_de_PHP|curs bàsic de PHP a cacauet.org]] 
- 
-En particular, para atenció a la [[https://www.cacauet.org/wiki/index.php/PHP_Forms|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: 
-  * [[https://www.w3schools.com/html/html_forms.asp|Formularis a W3Schools]]. 
-  * [[https://www.w3schools.com/html/html_form_elements.asp|Elements de formulari HTML]] per enviar dades a la nostra aplicació en PHP (text, menú desplegable, radio buttons, checkboxes, etc.) 
-    * Menció a part necessiten els diferents tipus d'[[https://www.w3schools.com/html/html_form_input_types.asp|input field]]. 
- 
-Un particular i útil [[https://www.jose-aguilar.com/blog/controlar-array-de-checkboxes-con-php/|exemple per utilitzar arrays amb els checkboxes]], ideal per fer un menú d'opcions a sel·leccionar. 
- 
-\\ 
  
 ===== Estructures de dades ====== ===== Estructures de dades ======
Línia 362: 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 374: Línia 361:
     * Evitar que es solapin els vaixells.     * Evitar que es solapin els vaixells.
     * Evitar que els vaixells es "toquin" (cel·les adjacents).     * Evitar que els vaixells es "toquin" (cel·les adjacents).
 +</WRAP>
 +
 +\\
 +
 +===== Formularis, GET, POST i PHP =====
 +
 +Referències bàsiques a W3Schools:
 +  * [[https://www.w3schools.com/html/html_forms.asp|Formularis HTML]].
 +  * [[https://www.w3schools.com/html/html_form_elements.asp|Elements d'un formulari HTML]].
 +  * [[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]]
 +  * 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>
 +
 +
 +Altres:
 +  * [[https://cacauet.org/wiki/index.php/Curs_de_PHP|Curs bàsic de PHP a cacauet.org]].
 +  * [[https://www.cacauet.org/wiki/index.php/PHP_Forms|Creació de formularis GET]]. Fes la pràctica de la fórmula de resolució de l'equació de 2n grau.
 +  * [[https://www.jose-aguilar.com/blog/controlar-array-de-checkboxes-con-php/|Checkboxes i arrays]], ideal per fer un menú d'opcions a seleccionar.
 +
 +
 +<WRAP tip>
 +Vés a les [[https://bytes.cat/fites_daw_mp07_uf1#fita_2us_formularis_amb_get_i_post|fites sobre formularis de la UF1 de MP07 de DAW]] i realitza els exercicis.
 </WRAP> </WRAP>
  
Línia 379: 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 412: 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]].
 +
 +\\
 +
 +===== Més coses =====
 +\\
 +
 +==== Carregar imatges ====
 +Aquí tens un [[https://pqina.nl/blog/image-upload-with-php/|tutorial per carregar imatges en PHP]].
 +
 +\\
 +
 +==== 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 d'email 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 les **llibreries ''phpmailer''**: amb aquesta llibreria podem enviar mitjançant un servidor extern (caldran credencials).
 +
 +\\
 +
 +=== Opció 1: Servidor local ===
 +É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.
 +
 +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: libs PHPMailer ===
 +Amb aquesta llibreria podem enviar mitjançant un servidor extern (caldran credencials).
 +
 +  * [[https://netcorecloud.com/tutorials/send-an-email-via-gmail-smtp-server-using-php/|Enviar emails utilitzant SMTP Gmail amb PHP]].
 +
 +<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.
 +
 +Per carregar les llibreries al vostre codi cal canviar els ''require'' que hi ha per:
 +  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>
 +
 +\\
  
  
php.1663338307.txt.gz · Darrera modificació: 2022/09/16 14:25 per enrique_mieza_sanchez