Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di Ceras
    Registrato dal
    Oct 2009
    Messaggi
    141

    L'hosting del mio sito mi ha bloccato l'accesso a index.php

    Ciao a tutti, non sono sicuro di dove postare il problema, che potrebbe coinvolgere argomenti di php, mysql e hosting.

    Ho da poco rimodernato un sito di e-commerce, dopo qualche mese noto che il sito risulta bloccato, mi arriva una mail dal mio servizio hosting (hosting solutions) che mi dice che hanno bloccato il php perché la mia pagina index.php sovraccarica il server.

    E' la prima volta che mi succede una cosa simile e non so come fare... La prima cosa che mi viene in mente è che vengono fatte troppe query; in effetti in ogni pagina vengono selezionati dal database 8 prodotti e caricate le categorie, ma mi sembra comunque strano!

    Queste sono le 2 query che vengono fatte nella home page (e anche nelle altre pagine):

    codice:
    // selezione di 8 prodotti a caso
    SELECT TOP 8 P.id, P.nome, P.descrizione, C.nome AS categoria, P.prezzo, P.immagine 
    FROM (Prodotti P INNER JOIN Categorie C ON P.categoria=C.id) 
    WHERE P.offerta=true
    ORDER BY Rnd(TimeValue(Now())*-10000000*[P.id])
    
    // selezione delle categorie (sono una ventina circa)
    SELECT id, nome FROM Categorie

  2. #2
    Non posso conoscere le regole ed i vincoli applicati dal tuo servizio do hosting , purtroppo ti devi rivolgere direttamente a loro, chiedendo il motivo per cui il tuo sito è stato bloccato e come puoi risolvere il problema.
    La differenza fra la genialità e la stupidità è che la genialità ha i suoi limiti.


  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    1,611
    hai fatto una query un pò inutile che complica, secondo me, il "motore" mysql.

    non ti bastava fare così?

    codice:
    select P.id, P.nome, P.descrizione, C.nome AS categoria, P.prezzo, P.immagine from Prodotti as p inner join Categorie as c
    on P.categoria = C.id
    where P.offerta = 'true'
    order by rand()
    limit 8
    e poi

    codice:
    SELECT id, nome FROM Categorie
    mi sembra di capire che lavoravi con access giusto?

    come query questa è mooolto semplice, non dovresti avere problemi.
    NON ABBANDONATE CANI O GATTI!!!

  4. #4
    Sicuro che non hai lasciato un ciclo while con un loop infinito?

  5. #5
    Originariamente inviato da Samleo
    Sicuro che non hai lasciato un ciclo while con un loop infinito?
    E' quello che pensavo anch'io, perchè anche se ci sono 25-30 query in una pagina di solito non ci sono problemi con i servizi hosting... Ma in questo caso la pagina neanche dovrebbe funzionare, perchè non si caricherebbe e dopo il tempo prestabilito nel php.ini si bloccherebbe tutto con un errore di php.
    Da quello che ho capito il sito funzionava...
    La differenza fra la genialità e la stupidità è che la genialità ha i suoi limiti.


  6. #6
    Diciamo che quello che hai detto è vero SOLO se il server è settato in quel modo.

    Ci sono provider che quel controllo nemmeno lo fanno, magari rischiando di sputtanare l'intero server condiviso.

    Magari chiedi se ti possono fare avere l'error_log del tuo account!

  7. #7
    Credo che piu o meno tutti impostino quel parametro di php, altrimenti a un malintenzionato basterebbe fare una cosa tipo
    Codice PHP:
    <?php
    a
    =0;
    while(
    a>=0){
    a=0;
    ++
    a;
    }
    ?>
    per creare un loop e mandare in balla l'intero server...
    La differenza fra la genialità e la stupidità è che la genialità ha i suoi limiti.


  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    1,611
    ma scusa perchè non provi la query che ti ho dato prima di fare casini ed impallare server?
    NON ABBANDONATE CANI O GATTI!!!

  9. #9
    Utente di HTML.it L'avatar di Ceras
    Registrato dal
    Oct 2009
    Messaggi
    141
    Originariamente inviato da activ
    hai fatto una query un pò inutile che complica, secondo me, il "motore" mysql.

    non ti bastava fare così?

    codice:
    select P.id, P.nome, P.descrizione, C.nome AS categoria, P.prezzo, P.immagine from Prodotti as p inner join Categorie as c
    on P.categoria = C.id
    where P.offerta = 'true'
    order by rand()
    limit 8
    In effetti così è molto più pulito... Quella query me l'hanno suggerita proprio nel forum, in quanto non sapevo applicare la selezione random. Sospetto che il costrutto TOP sia meno performante di LIMIT (magari TOP seleziona comunque tutti i risultati della query)

    Domani la provo e vi faccio sapere

  10. #10
    Utente di HTML.it L'avatar di Ceras
    Registrato dal
    Oct 2009
    Messaggi
    141
    raga mi ero dimenticato di un particolare: il database è access, quindi niente LIMIT ma solo TOP, inoltre non c'è la funzione rand() ma rnd()...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.