• User

    Internal Server error

    Salve,
    sto avendo problemi con l'apertura di alcune pagine del mio sito web.
    Dopo un bel pò di attesa che scoraggia gli utenti il messaggio che viene restituito è:

    Internal Server Error
    The server encountered an internal error or misconfiguration and was unable to complete your request.

    Ho contattato l'assistenza del mio Host e nel frattempo ho preso in considerazione l'ipotesi di eccessive query al db e quindi ho snellito le pagine in questione riducendo le interrogazioni al db ad una sola query ma il problema si presenta lo stesso sia con 1 che con 50 query.

    Da cosa potrebbe dipendere?

    Con un server dedicato il problema si risolverebbe?

    Any idea?

    Grazie

    Nik


  • Moderatore

    Internal Server Error è il classico messaggio che dice tutto ma non dice niente

    mi ricordo un articolo a proposito di un autore inglese molto ferrato in materia che iniziava dicendo: "Internal Server Error può indicare un errore che va dai permessi errati sui file, fino all'hard disk fuso".....

    in pratica può essere di tutto

    sarebbe utile per capire cosa sta succedendo sapere che sistema operativo è installato sul server, se il sito web usa CMS, se fa uso di script CGI e come sono settati i permessi dei file


  • User

    Ciao,

    il sistema operativo installato sul server (Apache) è Linux, il db è mysql 4.0, il sito web è un php nuke 7.8 (nussuno script CGI), i files hanno i permessi settati su 755.

    Dunque:

    il problema, Internal Server Error, si verifica solo su un modulo che ho preparato. In effetti credo di aver capito quale è il problema. Il file in questione contiene una 40ina di query. Se ne faccio solo UNA la pagina si apre subito.
    In pratica devo richiamare i records dei titoli azionari (nome, chiusura, variazione, min, max,apertura, volumi). Poichè per ogni pagina devo inserire una 40ina di titoli ho fatto singole query per ogni titolo e penso che così non sia corretto perchè credo che dovrei fare invece una singola query che richiama tutti i 40 titoli ma non ho capito come si fà.

    In allegato inserisco il file, se c'è qualche anima pia che me lo aggiusta mi farebbe una grande cortesia.

    Grazie

    Nik


  • Moderatore

    se fosse un problema di sintassi errata, l'interprete te lo direbbe

    a questo punto ho il sistema va in sovraccarico a causa del numero delle query o va in timeout oppure accede a qualche tabella per la quale l'utente usato non ha i permessi adeguati


  • User

    Quindi deduco che non rilevi errori di sintassi nel file così fatto.

    Per quanto riguarda i permessi sulla tabella non saprei ... fa parte dello stesso database su cui si appoggia il sito.

    Hai qualche consiglio utile da darmi?

    Grazie

    Nik


  • Moderatore

    si, potresti provare a visualizzare i privilegi dell'utente che accede a quel database, per vedere se magari gli vengono negati alcuni permessi

    inoltre potresti eseguire la query una alla volta per trovare quella che causa il problema


  • User

    Ok provo ma poichè le query sono tutte uguali, cambia solo il nome del titolo non è possibile raggrupparle e fare una sola query per tutti i titoli perchè se vedi il file mi sembra strano che si debbano fare tutte queste query, che poi sono praticamente tutte uguali.

    Grazie

    Nik


  • Moderatore

    beh si potrebbero rendere dinamiche, nel senso di scegliere dinamicamente il tipo e il numero di parametri, in fin dei conti sono tutte delle SELECT

    se poteva pure optare per SELECT *, ovviamente le performance sarebbero diminuite di un 4-5%


  • User

    Capisco,

    non ho idea su come si rendono dinamiche le query, potresti darmi una mano sulla base del file che ho allegato?

    Grazie mille

    Nik


  • Moderatore

    beh innanzitutto bisognerebbe separare l'html dal php, mettendo il codice php in un file a parte, magari crea una funzione, che so la chiami RecuperaDati e ci metti dentro tutta la logica che esegue le query

    per esempio se prendiamo queste due query

    SELECT DISTINCT ticker, timeStamps, closeData FROM mytable WHERE ticker = 'SRG' ORDER BY timeStamps DESC LIMIT 2
    
    SELECT DISTINCT ticker, DATE_FORMAT(timeStamps,'%d.%m.%Y') as date, closeData, openData, highData, lowData, volData From mytable Where ticker = 'PG' ORDER BY timeStamps DESC LIMIT 1
    

    è chiaro che si può fare qualcosa del genere

    
    SELECT DISTINCT $campi_da_estrarre as $alias_campi From mytable Where $condizione ORDER BY timeStamps DESC LIMIT 1
    

    a seconda dei casi le variabili $campi_da_estrarre, $aliasi_campi e $condizione possono assumere vari valori, passati come parametri alla funzione

    è chiaro che per fare una cosa del genere, bisogna analizzare completamente il flusso del programma, per stabilire cosa fa nelle varie query e a chi livello di generalizzazione si può arrivare


  • User

    Ok, provo e ti faccio sapere

    Grazie

    Nik


  • User

    Ciao,

    ho fatto qualche tentativo ma niente da fare, non sono molto pratico di funzioni e variabili ...

    Non ho capito se la query che proponi è l'unione delle prime 2 o è un altro modo per scrivere la seconda.

    Se non erro nella funzione campi da estrarre devo elencare tutti i campi di cui ho bisogno, mentre $alias_campi non ho afferrato a cosa serve ...

    $condizione = tutti i titoli per i quali ho sviluppaoto le singole query?

    Grazie

    Nik


  • Moderatore

    se non conosci il linguaggio è difficile da fare....

    ma chi l'ha sviluppato quel codice?


  • User

    Il codice l'ho sviluppato io, forse non è molto professionale ma con una sola query funziona bene, non c'è timeout o lentezza nell'aprire la pagina.
    Quando mi sono accorto che ci vuole un bel pò di tempo per aprire la pagina web ho cominciato a realizzare che forse bisogna stringere il file o magari alleggerirlo appunto con variabili, etc..

    Ma da qui a metterlo in pratica ... non sò se sono capace, ecco...

    Le diffficoltà penso di incontrarle nell'attribuire le variali gli poi gli outputs ...

    Se c'è per caso un'anima pia che mi fà sto favore a rieleborare il codice gliene sarei grato !!

    Nik


  • User

    Ciao,

    secondo te l'uso degli array potrebbe avere a che fare con la soluzione del mio problema?

    Non mi potresti dire qualcosina in più su come applicare la tua idea?

    Grazie

    Nik


  • Moderatore

    no gli array non c'entrano con il problema che stai avendo

    probabilmente o è una query in cui la sintassi è errata o è il carico sul database

    ho notato che IIS ha il bruttissimo vizio di restituire un errore 500 quando incontra query sbagliate negli script