• Off-topic
  • Programmare in PHP nel 2021 ha senso o no?

[cancellato] però in ambito datawarehouse non ci dovrebbe essere bisogno di filtrare le query o sbaglio? Non ci dovrebbe essere input dell'utente malefico, e quindi in quel caso query preparate hanno senso, inoltre non credo neanche che si usi PHP in ambito DW.

[cancellato] Premetto che di Hibernate ho solo visto codice scritto da altri per vari motivi non ho mai approfondito più di tanto, ma essendo un ORM come tanti altri più o meno complessi (da Android Room, Realm (però questo usa un paradigma abbastanza relazionale con un db non relazionale), ET- LINQ, jOOQ, ...) ho notato l'overload di codice spesso inutile dovuto oltre alla non conoscenza dell'architettura della libreria di ORM al linguaggio di programmazione.

[cancellato] Non lo è infatti, ma al testo scritto sì.
E se il linguaggio traduce SELECT * FROM prezzi WHERE item = "mela"; e SELECT * FROM prezzi WHERE item = "pera"; in due stringhe diverse invece che (SELECT * FROM prezzi WHERE item = ?;, "mela") e (SELECT * FROM prezzi WHERE item = ?;, "pera") , per il query planner sono due query diverse, e deve ricominciare l'analisi. Magari si ferma ad estrarre i literali e a renderla internamente pseudo-parametrica, ma è sempre lavoro in più che deve fare quando può comparare un hash di una stringa e accorgersi che, toh, ce l'ho già.

Si se viene mandato in SQL il ? sono d'accordo al 100% sulla maggiore efficienza (è evidente), ma la mia conoscenza sulle query, dovuta a varie influenze sul fatto di ridurre al minimo i Prepared statement (e la cosa bella che sento spesso parlare di questo da tante persone, anche autorevoli) in quanto a loro dire "sono una complicazioni affari semplici " (e si che lo trovi pure su alcuni libri di testo...) mi ha limitato le mie doti di investigatore mi ha fatto pensare veniva elaborata lato applicazione la query tramite l'ambiente virtuale appena citato da handymenny, d'altronde è sempre possibile fare un print della query buildata.

[cancellato] Non ho mai detto che non si debba fare o che servano a questo però 😉

Il mio era un: è meglio sanificare una volta e darlo in pasto ad una query nuova che filtrare e poi usare i prepared statement, ma sono d'accordo sul fatto che ci sono motivi per usarlo.

[cancellato] Conosco flotte di DBA (sic!) strenui sostenitori de "la coerenza relazionale deve essere garantita dall'applicazione" e che non mettono foreign key perché gli ostacolano i backup/restore (non hanno capito che basta sospenderle o eliminarle e ricrearle, in caso estremo...) e il loro modo di creare gli oggetti (per certa gente per dire è """normale""" che esistano prima le righe fattura della testata)... poi si chiedono perché sono sempre nervoso...

Questo è il minimo dei DBA. Nessun DBA è in pace con i charset per esempio....

Chiedo al moderatore se il testo scritto (con ovviamente riferimenti a commenti ed annotazioni) sul forum lo posso riutilizzare su un blog personale e/o in altri posti (tipo appunti, ovviamente senza scopo di lucro) in quanto è una bella discussione, soprattutto la parte su PDO.

    [cancellato]
    Quando ha raggiunto un "livello enterprise" e quando è stato superato ?

    Per me, alla fine conta quello che ci devi fare.
    Ogni linguaggio ha le sue peculiarità che lo rendono più o meno adatto per raggiungere uno scopo.. ma non è che venga limitato da questo.
    Buona parte dei backend è misto in diversi linguaggi. Diverse volte ho visto combinazioni di php, python o php e nodeJS a seconda del compito da svolgere.

      per il web il trend che vedo: webassembly (ottenuto da un altro linguaggio come rust ecc) + html +js,
      jamstack (come architettura), graphql (data retrival) , rest( data input), database (il tipo giusto per lo scopo, KV, RDMS, Graph, Time Series ecc..)
      Bisogna ricordarsi che: "Se il tuo unico strumento è un martello, tendi a trattare ogni problema come se fosse un chiodo"

      Detto questo PHP è sempre stato un mediocre (=un hack e non ingegnerizzato) linguaggio di programmazione.

        simonebortolin Chiedo al moderatore se il testo scritto (con ovviamente riferimenti a commenti ed annotazioni) sul forum lo posso riutilizzare su un blog personale e/o in altri posti (tipo appunti, ovviamente senza scopo di lucro) in quanto è una bella discussione, soprattutto la parte su PDO.

        @matteocontrini

          • [cancellato]

          simonebortolin però in ambito datawarehouse non ci dovrebbe essere bisogno di filtrare le query o sbaglio?

          La sicurezza la fai dappertutto. È ovvio che un sito accessibile pubblicamente o dalla maggior parte del personale di un'azienda è più a rischio, ma un'applicazione vulnerabile mette a repentaglio sia la sicurezza dei suoi dati sia quella del resto della rete. L'input malefico può arrivare da dove meno te lo aspetti 😀

          In un datawarehouse le query preparate in realtà hanno meno senso perché ci sono query meno frequenti che richiedono molto tempo per essere completate - e magari anche il DB è costruito ad hoc per certi tipi di interrogazione.

          Quindi il tempo di parsing e ottimizzazione della query è molto inferiore al tempo di elaborazione, e trovare il plan ottimale per ridurre al massimo i tempi può essere più importante, anche se ci mette un po' di più. Dove il tempo di parsing e quello di ottimizzazione diventano comparabili al tempo di esecuzione (e le query sono molto frequenti) è dove vuoi che siano riusate il più spesso possibile. I DB sono spesso anche in grado di individuare query "simili" - dipende da quanto cambiano, ma di solito c'è una cache, se a furia di inviare query sempre diverse i dati in cache non ci sono più le prestazioni decadono.

          Come usi un DB SQL è ortogonale al linguaggio di programmazione - le query sono le stesse che l'applicazione sia in C o in PHP.

            • [cancellato]

            juststupid + html

            No, adesso vogliono usare il Canvas direttamente perchè HTML è lento e non permette di avere sufficiente libertà. In pratica tentano di imitare le applicazioni native.

            Webassembly serve esattamente togliere di mezzo Javascript

            juststupid (=un hack e non ingegnerizzato) linguaggio di programmazione.

            Stendiamo un velo pietoso su molti ultimi linguaggi inventati a casaccio da chi faceva meglio a darsi all'ippica. Non molto diversi da PHP, alla fine. Troppa roba pensata per risolvere il problema del momento senza alcuna visione globale e in avanti.

              juststupid Detto questo PHP è sempre stato un mediocre (=un hack e non ingegnerizzato) linguaggio di programmazione.

              Che bella definizione.

              [cancellato] No, adesso vogliono usare il Canvas direttamente perchè HTML è lento e non permette di avere sufficiente libertà. In pratica tentano di imitare le applicazioni native.

              Ho sentito, ho parecchi dubbi sull'accessibilità sinceramente.

              [cancellato] In un datawarehouse le query preparate in realtà hanno meno senso perché ci sono query meno frequenti che richiedono molto tempo per essere completate - e magari anche il DB è costruito ad hoc per certi tipi di interrogazione.

              Ecco io pensavo il contrario

              Technetium Buona parte dei backend è misto in diversi linguaggi. Diverse volte ho visto combinazioni di php, python o php e nodeJS a seconda del compito da svolgere.

              Si basata su architettura a microservizi e altre cose del genere.

                • [cancellato]

                simonebortolin Ecco io pensavo il contrario

                Beh no ha senso... va ottimizzato quel che ti può dare un "ritorno d'investimento", inutile ottimizzare (pesantemente) e riutilizzare una query manuale o estemporanea che vai a lanciare una volta al giorno, anche se impiega quella frazione di punto percentuale di tempo in più pace e bene.
                Diverso è invece andare a riusare il planning di una query che esegui decine o centinaia di volte al minuto, lì salvare millesimi di secondo a fine giornata ti porti a casa svariati minuti di tempo CPU risparmiato.

                [cancellato] No, adesso vogliono usare il Canvas direttamente perchè HTML è lento e non permette di avere sufficiente libertà. In pratica tentano di imitare le applicazioni native.

                Tranquillo, tra 5 anni chiuderanno il cerchio e torneranno a creare le applicazioni native perché saranno "la novità" e "ultraveloci".
                Ridiamoci sopra valà...

                Avendo usato PHP per un breve periodo, ritengo che rimarrà per sempre un linguaggio "legacy" come ne ha parlato molto l'OP.
                L'avvento delle nuove tecnologie per web ha ucciso molto lo scripting ibrido HTML/PHP, ma di certo ad oggi ci sono ancora parecchi siti web che semplicemente non hanno intenzione di spostarsi dal codice che si è creato.
                Quello che si sta facendo con le ultime versioni di PHP (vedi 8.0) è cercare di correggere tutte le incoerenze che sono rimaste per anni, ma di certo non potranno spostarsi molto per il discorso di prima.

                Ha senso quindi usare PHP nel 2021? L'unico motivo per cui lo andrei a utilizzare, è se dovessi necessariamente utilizzare un codebase esistente di parecchi anni fa, altrimenti migrerei subito a soluzioni più "moderne", anche a costo di dover riscrivere tutto.

                  simonebortolin no puoi fare if(isset($_POST))

                  Sono piuttosto sicuro che in $_SERVER ci sia il metodo della richiesta
                  Edit: te l’hanno già detto.
                  Ma per me i problemi del PHP sono altri, ad esempio che se cerchi di accedere a delle chiavi inesistenti da solo un warning, la comparazione non è strict di default,…
                  La versione 8 è un po’ meglio

                    eutampieri Si si so di $_SERVER, ma in realtà ho avuto problemi a prendere alcuni dati da lì... e comunque non è neanche bello come viene fatto in php

                    Per la compilazione non strict si ogni tanto da fastidio.... Ma non lo reputo il problema principale

                    dadadani
                    Quindi a che linguaggio ti daresti adesso per lo sviluppo web ?
                    Quali sono le soluzioni più moderne ?

                      il vero problema è che ormai non ha più senso essere full stack

                        dadadani riscrivere tutto dipende da quanto sia il tutto.... C'è chi (pochi ma grossi) continua a usare motori applicativi in cobol per non riscrivere tutto, vedi te...

                          DE8 Ora il fatto che mi sono definito fullstack è dovuto ad una serie di cose, non è il lavoro della mia vita e come già detto a breve mi occuperò di altro (alla fine il CV non si compila da solo e l'esperienza senza CV non conta), ho fatto tanti lavoretti nel corso degli ultimi anni. Ma attualmente è quello che paga di più.

                          • DE8 ha messo mi piace.

                          Alfoele C'è chi (pochi ma grossi) continua a usare motori applicativi in cobol per non riscrivere tutto

                          😱

                          • [cancellato]

                          • Modificato

                          Alfoele Non così pochi e non solo così grossi, purtroppo.

                          Fun fact: praticamente tutte le banche (ad eccezione a quanto so di Banca Sella) hanno ancora tutto il "core" che gira su mainframe. Tutte le applicazioni terminali o home banking sbrilluccicoso altro non sono che appendici che richiamano funzioni al MF.

                            [cancellato] Aggiungo anche back end di società come coop che girano su COBOL!

                            Carrellata di risposte in arrivo

                            simonebortolin Legacy anche perché non vengono utilizzati i comuni sistemi CI/CD ma semplicemente un caricamento via FTP o simili (in realtà si può usare Heroku e fare un PHP legacy CI/CD). Non è da confondere con la modalità con framework come Laravel che fa in modo di lavorare come fosse un ambiente più simile a quelli esistenti come Node.js, e simili, ma che non analizzerò per due motivi: la percentuale d'uso di queste tecnologie è bassa.

                            Questo dipende solo ed esclusivamente dall'organizzazione del team, si può fare benissimo CI e CD anche con PHP.

                            simonebortolin essere file PHP eseguibili dall’interprete PHP stesso

                            Ed ecco a cosa serve la validazione degli input, usare le directory corrette ed escapare le stringhe.

                            simonebortolin non permette di elaborare i dati post in formato json.²

                            json_decode, json_encode

                            simonebortolin l’ennesimo problema di sicurezza

                            No(?), se il developer è una scimmia non è un problema del linguaggio.

                            simonebortolin il routing³ permette di accedere al file conn.php senza grossi problemi

                            Ti ricordo che tutto quello messo tra i tag di php non viene MAI inviato al client, salvo l'esplicito uso di un print o una configurazione errata del webserver.
                            Ad ogni modo, in un sistema decente, i file di configurazione non sono esposti al mondo, quindi magari invece di importare "./conn.php" importi "../conn.php", dove ../ è una directory non pubblica.

                            simonebortolin inoltre si ha per esempio user.php, login.php: è possibile che uno di questi file ci ha una versione non aggiornata di qualche controllo rendendo pericolosa la sicurezza

                            Penso di non aver capito ciò che volevi dire

                            simonebortolin PHP legacy di default mette come output il mime-type dell’html, qualsiasi altro mime-type deve essere specificato⁴, PHP legacy ha pochi controlli su user agent, cookie, e tantissimi header che vengono comunemente usati da anche Laravel in PHP.

                            Eh beh, di sicuro i mime types non se li può inventare.
                            Inoltre è possibile cambiare il default type.
                            La gestione di cookies, user agent e header è perfettamente fattibile anche su php stock.

                            simonebortolin questo richiede normalmente un invio di messaggi di tipo json o xml

                            Please don't.
                            Usare xml nel 2021 andrebbe evitato.

                            simonebortolin (il principale problema che ho riscontrato nell’usare Json in PHP è quello che basta uno spazio all’inizio o alla fine ed il Json non è più valido)

                            La pulizia degli input esiste per un motivo.

                            Inoltre se hai generato un json spero tu abbia usato funzioni apposite, e non roba del tipo "{" + key + "\":\"" + type + "\"}", dunque il famoso "spazio in più" non dovrebbe esistere, e se dovesse esistere, il tuo problema è ben differente.

                            simonebortolin spesso è necessario avere funzionamenti diversi a seconda di GET o POST

                            $_SERVER['REQUEST_METHOD'] esiste per un motivo.
                            Bastano 30 secondi su stackoverflow per trovarlo e ti dirò di più, la risposta ha oltre 10 anni.

                            simonebortolin PHP 5.0 era molto insicuro e pieno di bachi, ma almeno era veloce

                            Ti correggo: PHP5.x era insicuro, pieno di bug e lento come la morte.

                            simonebortolin PHP 7.0 ha rallentato tanto l’esecuzione di PHP⁶

                            Ceeerto, non è che le aziende non vogliono investire nell'aggiornamento della loro roba "perché tanto funziona" (poi si trovano un backup non programmato su qualche sito di hackeroonies e piangono).
                            Tralasciando che la sicurezza al costo della velocità dovrebbe essere sempre preferita, PHP7+ garantisce velocità e sicurezza migliori di PHP5.

                            simonebortolin rendendolo di fatto scartato da tutti gli sviluppatori

                            Se per scartato da tutti gli sviluppatori intendi "non disponibile tramite apt scrivendo un comando perché quello sappiamo fare e se le cose diventano mezzo secondo più lunghe fa tutto schifo" devo darti ragione, altrimenti beh, sbagli sui dati anche qui.

                            simonebortolin Se invece vuoi fare un built-in devi perdere tempo in configurazioni di apache o nginx, fmp, php, sia in ambiente di sviluppo che in produzione.

                            Ed ecco come siamo arrivati alla gente che usa i webserver "di debug" in produzione.

                            simonebortolin Senza dimenticare l’annoso problema che PHP non usa Unicode, come viene usato da Java, Python, Node.js: in PHP è difficile far pace con i simboli di carattere non supportato, cioè che il principale problema di PHP è se stesso: l’architettura è nata errata negli anni 90, ed ora ci dobbiamo adeguare a questo.

                            Basta cambiare un'impostazione per sistemare tutto, non è difficile da fare.
                            Senza contare che ci sono migliaia di funzioni per gestire unicode su php.

                            simonebortolin Aggiungo anche una ultimissima cosa: integrazione con gli IDE: so che c’è una eterna diatriba tra programmare su terminale con vi(m) o programmare su IDE o su programmi di coding leggero: mentre i primi 2 sono molto orientati a fare operazioni di debug e compilazione tutto su terminale, il terzo usa un ambiente completo che ti fa tutto.

                            In realtà l'ambiente completo che "ti fa tutto" *ensomma* è l'ide, non il text editor.

                            simonebortolin Mescolando PHP e HTML si potrebbe pensare pure di generare CSS e JS custom in base a cosa genera il PHP: questa è una bad pratices perché il codice sarebbe molto più soggetto a SQL Injection.

                            "Se mischi benzina e gasolio ti si hackera la centralina"
                            è roba che non c'entra assolutamente nulla, sicuramente non è una buona soluzione per le performance, ma in che modo dovrebbe portarti alla sql injection?
                            Senza contare che esistono gli escape, per tutto, ed anzi, esistono pure i prepared statements, va te.

                            simonebortolin Concludo dicendo: che fare progetti in PHP nel 2021 senza nessun framework in maniera liscia standard non ha senso, tutto il resto si potrebbe fare perché comunque PHP è un buon linguaggio ma ha senso usare un linguaggio morto, ovviamente è preferibile usare altre strade

                            Ti sei contraddetto da solo.

                            simonebortolin in una applicazione bancaria è necessario essere sicuri che uno non possa inviare soldi via una richiesta GET

                            E perché mai? Se il mio programma sa gestirla non ho problemi.
                            Potenzialmente potrei far funzionare tutto a richieste DELETE, non sarebbe standard, ovvio, ma se sia il client che il server sanno come gestirsi la roba, funzionerebbe perfettamente.

                            simonebortolin Se ci dimentichiamo di specificarlo succede che un output di tipo json viene stampato con un times new roman.

                            Perché viene passato come HTML e quindi i browser applicano lo stile di default, non è PHP che si fa una copia del font e la gira all'utente tanto per simpatia.

                            [cancellato] E allora per quali altri utilizzi dovrebbe andare bene?

                            simonebortolin essere sicuro che non c'è nessun echo né prima né dopo di spazi altrimenti si corrompe

                            Non è che si corrompe, se aggiungi roba non è più un json, dunque, giustamente, non viene interpretato.
                            Metti un print sulla pagina prima del respondJSON da te citato e fammi sapere cosa succede.

                            simonebortolin Inoltre se il file è già stato parsato non funziona

                            File? quale file

                            simonebortolin no puoi fare if(isset($_POST)) ma se il post è vuoto non funziona (anzi il comportamento non è definito, per questo si mette come minimo un hidden o sumbit) e non puoi verificare PUT, GET, DELETE e tutti gli altri

                            $_SERVER['REQUEST_METHOD']

                            simonebortolin Si può dire che l'elaborazione PHP 7.0 è più veloce della 5.0 ma non il tempo di esecuzione di uno script PHP.
                            In generale è più lento, poi fare un while(i<1000) i++ è più veloce.

                            Mi sa che dovresti cercarti dei benchmark decenti

                            uadopo Evidentemente gli piace fare schifo

                            handymenny Vuoi dire che una singola esecuzione di uno script è più lenta in php 7 (e successivi) ?

                            Mi sembra impossibile, data l'introduzione di sistemi di caching sempre migliori e altre varie migliorie per sistemare eventuali problemi di performance.

                            [cancellato] Pessima scelta soldato, pessima scelta

                            simonebortolin Beh Wordpress usa questo design e fare tanti file su PHP è un problema di sicurezza

                            HO BISOGNO DI UN PO' DI VARECHINA PER I MIEI OCCHI.
                            Come dovrebbero essere dei file, esattamente funzionanti nello stesso identico modo, un problema di sicurezza?

                            simonebortolin potrei limitare l'accesso con htaccess

                            Tralasciando che metterei le mani al collo di chi usa apache e non nginx, non è un problema di PHP se tu lasci accesso a roba sbagliata, sarebbe come prendersela con PHP se metti la stringa di connessione in un echo e lui non dovesse avere una super AI per detectare il tuo errore ed evitare di farti leakare le credenziali di accesso.

                            simonebortolin Sì, l'esecuzione di una singola istruzione è più veloce, l'esecuzione di un intero script compreso l'avvio dell'interprete php è più lento

                            Guarda, sono piuttosto sicuro del contrario, riesci a dimostrarmelo in qualche modo oggettivo?

                            simonebortolin mysqli_real_escape_string

                            Certo che se usi roba del genere te lo meriti di farti bucare.
                            Ma usare pdo fa schifo a tutti? Vi state complicando la vita per poi lamentarvi delle vostre pessime decisioni.

                            simonebortolin le query parametriche quelle con il ? secondo l'attuale letteratura sono da EVITARE in favore di:

                            WTF
                            Spero tu sia ironico, perché hai appena smontato tutto il web e anni di web development.
                            Ah sì, pure youtube le usa, direi che zio google non è proprio il primo pirla dietro l'angolo.

                            simonebortolin (c'è clouflare che mi blocca i < ? senza spazio )

                            Ed ecco a cosa servono gli ide e i test prima di mandare in produzione.
                            Se tu sbagli non puoi prendertela con il linguaggio.

                            simonebortolin che su pluto_get.php?value non ho fatto il filtro perché tanto è un valore passato da javascript sai quanto è difficile da testare questo codice

                            Se non hai fatto la sanificazione dell'input o ancor peggio non hai usato i prepared statements il problema sei tu, non PHP.
                            È grazie alla gente che ragiona in questo modo se poi ci troviamo dump come quello di homobile.

                            simonebortolin in php è completamente diverso: un file php è visto come un file dentro la cartella pubblic e l'unico modo per inibire l'accesso è usare htaccess.

                            coff coff, dovresti settare la directory del webserver ad un livello più alto

                            uadopo Ho lavorato il PHP da autodidatta diversi anni fa ma posso assicurare che la forte tipizzazione e pattern in ambiente .NET lo rende molto più manutenibile e se si cambia azienda tendenzialmente non è un dramma lavorare sul codice di altri

                            Tralasciando che da quanto posso vedere sempre più aziende vogliono allontanarsi da .net, PHP supporta la tipizzazione, ovvio, non è un linguaggio a tipizzazione statica, ma i tipi esistono, come esistono le classi.

                            handymenny In PHP lo decidi tu, sono previste entrambe le modalità. Da quello che ho capito, si preferisce farle compilare al DB perché è più sicuro

                            Ci sono almeno due tipi di approccio differenti:

                            • Escape della query lato client -> Funziona, ma poi si rischia di finire come zoom, meglio evitare.
                            • Prepared statements -> Il client comunica al db la query che si andrà a fare, ma senza i dati.
                              Dunque il server sa già cosa aspettarsi, ha già fatto le sue ottimizzazioni e così via, semplicemente gli si passano i dati e se gli arriva un DROP dentro una stringa, non verrà eseguito, in quanto lui già sa qual è la query da eseguire e dove vanno i suoi parametri.

                            [cancellato] comincia a metterci una barriera in più invece di sperare che la libreria di sanitizzazione degli input scaricata da qualche repository

                            Esattamente, ma soprattutto, ti garantisce che nessuno vada ad eseguire queries non scritte da te.
                            Senza contare che con sta roba si possono richiamare tante volte le stesse query cambiando solo i dati.

                            simonebortolin dovuta a varie influenze sul fatto di ridurre al minimo i Prepared statement (e la cosa bella che sento spesso parlare di questo da tante persone, anche autorevoli)

                            Citamene una perché è ridicolo

                            simonebortolin "sono una complicazioni affari semplici "

                            Ovvio che sono complicazioni di affari semplici, come lo è passare per tutti i sistemi di sicurezza della banca.
                            Tutti i clienti son contenti di non avere scanner e roba varia, fino a quando non entra uno con un ak47 e pessime intenzioni.

                            [cancellato] Webassembly serve esattamente togliere di mezzo Javascript

                            In realtà no, visto che wasm ha comunque bisogno di js per funzionare.
                            Serve a sostituirlo solo per la roba pesante che esso stesso non sarebbe in grado di gestire.

                            Technetium Qualsiasi linguaggio è portato allo sviluppo web, non c'è un migliore, soprattutto nella direzione che si sta prendendo, ovvero quella di dare API e non direttamente del contenuto.

                            Devi appunto vedere con cosa gira meglio il backend ed adattare le API ad esso, non il contrario.

                              Informativa privacy - Informativa cookie - Termini e condizioni - Regolamento - Disclaimer - 🏳️‍🌈
                              P.I. IT16712091004 - info@fibraclick.it

                              ♻️ Il server di questo sito è alimentato al 100% con energia rinnovabile