lunedì, 16 Giugno 2025

[risolto] Wacom Desktop Center: nessun dispositivo connesso (su Windows 10)

Problema: la tavoletta grafica non sembra essere più riconosciuta dal Wacom Desktop Center, nonostante sia stata installata correttamente e altra volte la riconoscesse

Soluzione: riavviare il servizio Wacom Professional Service da Servizi di Windows

Il problema potrebbe dipendere dal servizio Wacom Professional Service che per qualche motivo si è bloccato (in altri casi bisogna reinstallare il driver). Aprendo il Wacom Desktop Center sotto la voce I miei dispositivi si vedrà che non ci sono dispositivi connessi ed apparirà il messaggio: nessun dispositivo connesso

Per risolvere il problema premiamo Win+R e digitiamo services.msc

Si aprirà la finestra di gestione dei servizi, cerchiamo il servizio Wacom Professional Service o TabletServiceWacom.

Una volta individuato il servizio clicchiamoci sopra col destro e selezioniamo la voce Riavvia.

A questo punto apriamo nuovamente Wacom Desktop Center e dovremmo vedere nuovamente la tavoletta elencata tra i nostri dispositivi.

[questa soluzione è stata testata con una Wacom – One]

Simulazione sull’espansione del contagio da Coronavirus (COVID-19)

Se stai cercando informazioni sul Coronavirus (COVID-19) ti raccomando di visitare i seguenti siti ufficiali:

Informazioni sul Coronavirus in Italia (Ministero della Salute)

Informazioni sul Coronavirus nel mondo (Organizzazione Mondiale della Sanità)

Panoramica delle condizioni del Coronavirus (Organizzazione Mondiale della Sanità)

Domande e risposte sul Coronavirus (Organizzazione Mondiale della Sanità)

Io non sono un medico e il presente articolo è stato ispirato da quello pubblicato sul The Whashington Post: Why outbreaks like coronavirus spread exponentially, and how to “flatten the curve” 

Quello che mi interessa in questa sede è dare uno spunto di programmazione a tutti quelli che, come me, ora sono chiusi in casa ed hanno voglia di ingannare il tempo con qualcosa di diverso dal solito (insomma, buttandosi a fare un po’ di programmazione!).

Spero che questo sia anche un ottimo esempio del perché, in questo momento, dobbiamo fare di tutto per restare il più possibile a casa ed evitare il contatto con gli altri, per la nostra e la loro salute, anche se sono nostri familiari o amici.

Fatte queste premesse arriviamo a noi: quello che vogliamo fare è costruire un simulatore, similmente a quanto dimostrato dal The Whashington Post, su come si possa espandere un’epidemia e quanto sia utile ridurre al minimo l’interazione tra i vari membri della popolazione.

Il simulatore è costruito interamente in JavaScript utilizzando l’elemento canvas del HTML5.

La versione interattiva del simulatore, realizzato come illustrato nell’articolo, si trova in fondo all’articolo

Quello che vogliamo costruire è un simulatore come questo di seguito:

I parametri in input che vogliamo passare al simulatore saranno:

  1. la popolazione totale (800 nel mio caso)
  2. il numero di malati iniziali (ne basta anche solo 1)
  3. il numero di quelli che restano fermi
  4. il tempo di guarigione in millisecondi (3000 nel mio caso)

Giocando un po’ con il simulatore ci accorgeremo subito del perché restare a casa è in questo momento fondamentale.

Partendo dai parametri precedenti e impostando a 0 il numero di quelli fermi otterremo una curva simile alla seguente:

In questo caso il contagio ha raggiunto un picco massimo del 81% della popolazione, infettando tutti quanti alla fine della simulazione. Nella realtà questo picco rappresenta il massimo impatto sul sistema sanitario, che nella realtà sarebbe al collasso se dovesse avvenire qualcosa di simile.

Se aumentiamo il numero della popolazione che sta ferma (200 individui, ovvero il 25%) abbiamo una curva simile alla seguente:

Notiamo che il picco massimo è sceso leggermente, arrivando al 68%, ma restando comunque molto alto.

Attuando misure più restrittive e fermando il 75% della popolazione, ossia 600 individui su 800, avremo una curva come la seguente:

Il picco si è dimezzato in questo caso, arrivando ad un massimo del 39%. Con misure ancora più restrittive, arrivando a fermare 700 individui, quindi l’87,5% della popolazione, si arriva a picchi ancora inferiori, ma non inesistenti (si parla del 21%):

Questo modello rappresenta, sebbene in linea di massima, molto bene la situazione attuale. Le misure restrittive servono principalmente per evitare il collasso del sistema sanitario e dare la possibilità ai medici di occuparsi di tutti quanti i pazienti più gravi, cosa che in caso contrario sarebbe impossibile. Il contagio allungherà così la sua presenza nel tempo, ma verrà anche abbattuto il suo impatto sulla società.

Inutile dire come questa simulazione sia molto approssimativa e non tiene conto di altri fattori, tra il quale anche il decesso dei malati.

Detto tutto questo arriviamo al codice vero e proprio. Anzitutto creiamo l’interfaccia in HTML nel modo seguente:

Procediamo adesso con il codice in JavaScript, che riporto di seguito con i commenti all’interno del codice:

Infine riporto di seguito l’esempio funzionante, per chiunque lo volesse testare al volo (inserisci i parametri e premi INIZIA):

Popolazione Malati iniziali Fermi T. guarigione

Con un po’ di pazienza e qualche altro accorgimento (per esempio che i pallini non possano essere generati fuori dalle pareti) si può implementare la simulazione per avere anche diverse zone isolate.In questo caso notiamo come una zona isolata aiuti ulteriormente a ridurre il numero di contagiati e mantenere anche parte della popolazione sana, benché nessuno stia fermo.

Per costruire la zona isolata possiamo predisporre le pareti nel modo seguente:

Dobbiamo inoltre prendere qualche altro accorgimento, ma questo lo lascio per chi ha voglia di provarci per conto proprio. 🙂

[mysql] Ripristinare utente root sul database MySQL su Ubuntu

Potrebbe accadere che si debba ripristinare la password dell’utente root del database MySQL. In tal caso su Ubuntu è sufficiente seguire la seguente procedura.

Interrompiamo l’esecuzione del servizio MySQL.

Facciamo ripartire il MySQL in modalità safe saltando le tabelle relative ai permessi.

Entriamo nel database:

Modifichiamo la password dell’utente root.

Fermiamo nuovamente il servizio:

Riavviamo il servizio.

[wordpress] Trasferire sito da un dominio (o da locale) ad un altro

Trasferire un sito fatto in WordPress da un dominio all’altro è molto semplice. Questo vale anche nel caso in cui si abbia un sito in WordPress su un server locale (per esempio XAMPP) e lo si voglia trasferire su un hosting online.

1. Copiare tutti i file

Anzitutto dobbiamo copiare tutti i file da un dominio all’altro. Se abbiamo il sito su XAMPP, in locale quindi, dobbiamo individuare la cartella di installazione e copiare tutti i file contenuti in essa. La cartella con i file avrà circa questo aspetto:

Trasferiamo tutti quanti i file nella radice del nuovo hosting.

2. Esportare il database

Adesso dobbiamo esportare il database del sito, cosa che possiamo fare tipicamente da PHPMyAdmin. Nel caso di XAMPP l’indirizzo per l’accesso al database sarà probabilmente http://127.0.0.1/phpmyadmin

Dentro PHPMyAdmin selezioniamo il nostro database e poi andiamo alla voce Esporta. In generale da qui è sufficiente cliccare su esegui per scaricare il file *.sql.

3. Cambiare l’indirizzo del sito nel database

A questo punto apriamo il file *.sql che abbiamo appena scaricato con un editor di testo (per esempio Notepad++).

Dentro il file cerchiamo il termine siteurl, dovremmo trovare qualcosa di simile a questo:

Questo è l’indirizzo del nostro sito. Nel caso specifico vuol dire che il vecchio percorso del sito era http://127.0.0.1/wp

Immaginiamo che il nuovo dominio, sul quale vogliamo trasferire il sito, sia https://petarkaran.it

Faccio notare che il nuovo dominio ha la dicitura https anziché http.

A questo punto dobbiamo fare le seguenti sostituzioni usando l’opzione Trova e Sostituisci (disponibile nella maggior parte degli editor come Notepad++). Nel mio caso procederò nel modo seguente:

Attenzione a rispettare la medesima combinazione di slash. Quindi sostituiremo con i seguenti comandi:

http://127.0.0.1/wphttps://petarkaran.it

http:\/\/127.0.0.1\/wphttps:\/\/petarkaran.it

127.0.0.1/wppetarkaran.it

127.0.0.1\/wppetarkaran.it

ATTENZIONE a non fare i seguenti errori dove la struttura del dominio non è la medesima.

http://127.0.0.1/wphttps://petarkaran.it/

http://127.0.0.1/wp/https://petarkaran.it

In generale se si deve passare da un dominio ad un altro dominio è sufficiente usare:

https://vecchiodominio.exthttps://nuovodominio.ext

https:\/\/vecchiodominio.exthttps:\/\/nuovodominio.ext

Una volta fatte le modifiche salvare il file *.sql ed importarlo sul nuovo database.

4. Modificare wp-config.php

Ultima operazione che dobbiamo fare è modificare la configurazione del database dentro al file wp-config.php

Apriamo il file e modifichiamo le seguenti righe di codice:

In ordine mettiamo i dati del nome del database, lo username del database, la password del database e l’indirizzo host del database.

Una volta modificato il file wp-config.php carichiamolo sul nostro nuovo hosting ed abbiamo finito.

[magento2] Script esterno per rimuovere le immagini duplicate su tutti i prodotti

Obiettivo: leggere tutti i prodotti del negozio su Magento 2 e eliminare tutte le immagini duplicate per ciascun prodotto.

In Magento 2 può capitare di ritrovarsi prodotti con immagini duplicate, specialmente a seguito di una importazione di dati. Inoltre sembra che ci siano anche dei bug, o almeno ci sono stati nelle diverse versioni, che producevano questo fastidioso problema.

Quello che vogliamo fare è creare una pagina correggi_immagini.php, nella root del sito, richiamando la quale percorreremo tutti i prodotti in cerca di immagini duplicate e le elimineremo.

Come piccolo accorgimento voglio che lo script sia eseguito solo a seguito di una specifica chiamata GET sulla pagina, per esempio /correggi_immagini.php?auth=1234567890abcdefghilmnopqrstuv

Al posto di 1234567890abcdefghilmnopqrstuv raccomando di sostituire un codice sufficientemente complesso.

Nei commenti ho inserito i dettagli sullo sviluppo dello script:

[excel] Generare una password casuale di lunghezza arbitraria usando il calcolo matriciale

Questa soluzione si ispira ad un precedente articolo a cui rimando per chi fosse curioso di approfondire: [excel] Come creare una password casuale di lunghezza arbitraria con un’unica formula

Il risultato che voglio ottenere sarà simile a questo:

Avendo una cella in input F2 indichiamo la lunghezza della password che desideriamo ottenere, nella cella sottostante una singola formula genera una password pseudo-casuale.

Prima di procedere oltre raccomando per password importanti l’uso di software più affidabile, con algoritmi di generazione di valori casuali superiori ad Excel, come per esempio KeePass.

Anzitutto voglio creare un set di caratteri da cui estrarre quelli della password. Immaginiamo di voler scrivere automaticamente una stringa contenente tutte le lettere maiuscole.

Come illustrato nell’articolo precedente partiamo dal presupposto di voler ricavare i caratteri da una tabella ASCII come la seguente:

Le lettere maiuscole vanno dal carattere 65 al carattere 90. Per ottenere l’intervallo di numeri desiderato usiamo:

Questo produrrà una matrice come questa:

Se volessimo trasformare ciascun numero in un carattere dovremmo usare la funzione CARATT.UNI nel modo seguente:

Il risultato sarà simile a questo:

Applichiamo ora CONCAT alla matrice così ottenuta e avremo tutti i caratteri in una singola riga.

Ripetiamo l’operazione per gli intervalli 97:122 e 33:47 e concateniamo il tutto ai numeri da 0 a 9, nella seguente unica formula:

Tutto questo produrrà una riga come la seguente:

La riga ha in tutto 77 caratteri. Adesso, dopo averla unita, vogliamo spezzarla di nuovo in ogni singolo carattere, usando, come nell’esercizio precedente, la funzione STRINGA.ESTRAI:

Infine usiamo INDICE sulla matrice così creata ed estraiamo per n volte un valore a caso tra 1 e 77. Concateniamo il tutto per ottenere una unica stringa di testo contenente la password.

Affinché la funzione CASUALE.TRA ricalcoli il valore per ogni singolo carattere desiderato, utilizziamo un piccolo trucchetto, inserendo una matrice all’interno della funzione CASUALE.TRA in questo modo:

Grazie al SE sommo sempre 0, per qualunque valore generato da RIF.RIGA(INDIRETTO("1:"&F2)) che produrrà un vettore di dimensione n quanto è la lunghezza desiderata della password.

[woocommerce] Disabilitare metodi di spedizione in base alla classe di spedizione

Aggiungendo un filtro a functions.php del tema attivo o in qualunque plugin attivo, possiamo escludere alcuni metodi di spedizione in base alla class di spedizione del prodotto.

Immaginiamo di aver aggiunto, tra i metodi di spedizione, qualcosa di simile (nel mio caso Corriere BRT):

E contestualmente abbiamo creato una classe di spedizione chiamata sempre Corriere BRT nel modo seguente:

A questo punto vogliamo che solo i prodotti con la suddetta classe abbiano a disposizione il suddetto metodo di spedizione, che venga invece escluso per quelli senza una classe.

Procuriamoci anzitutto l’ID della classe e quello della spedizione. Utilizzando Chrome, nel mio esempio, clicchiamo col destro sulla classe di spedizione e scegliamo Ispeziona.

Nella finestra di ispezione individuiamo il codice della classe nel modo seguente:

Nel mio caso il valore da salvare è 17834.

Adesso individuiamo l’ID del metodo di spedizione. Lo possiamo recuperare dal carrello sempre utilizzando Ispeziona su Chrome. Andiamo nel carrello dove abbiamo un prodotto con il metodo di spedizione desiderato:

Clicchiamo su Ispeziona ed individuiamo il seguente pezzo di codice:

Nel mio caso il codice è flat_rate:7

Raccolte tutte queste informazioni andiamo a modificare il file functions.php aggiungendo il filtro.

Modifichiamo opportunamente i due codici che ci interessano.

Fatto questo ci accorgeremo come il hook woocommerce_package_rates non viene chiamato sempre, ma solamente al momento in cui si aggiorna la quantità di prodotti nel carrello. Affinché la cosa funzioni correttamente dobbiamo chiamarlo sempre.

Per farlo andiamo su WooCommerce > Impostazioni > Spedizione > Opzioni di spedizione e qui spuntiamo la voce Abilita la modalità di debug

Se abbiamo fatto tutto correttamente adesso il metodo di spedizione è disponibile solo per la classe scelta.

[wordpress] Escludere pagine dalla sitemap generata da YoastSEO oppure JetPack

Sia YoastSEO che JetPack permettono di generare automaticamente delle sitemap per i contenuti del sito.

Potrebbe essere però necessario escludere alcune pagine dalla sitemap. Per esempio le pagine del carrello, del checkout e dell’account, generate da WooCommerce, comprendono il tag noindex, che le esclude dall’indicizzazione di Google per ovvie ragioni (principalmente pratiche, inutile indicizzare contenuti accessibili solo per motivi funzionali o per alcuni utenti).

In entrambi i casi, la presenza di tali pagine nella sitemap, provoca degli errori sulla Google Search Console (vengono proposti link per l’indicizzazione, che poi non possono essere indicizzati per via del tag noindex). Per risolvere simili problemi è sufficiente rimuovere le pagine coinvolte dalla sitemap.

In entrambi i casi è possibile farlo programmaticamente (per YoastSEO anche intervenendo nelle opzioni di ciascuna pagina) aggiungendo un’opportuno filtro nel file functions.php del tema (o dove si preferisce).

Per JetPack sarà sufficiente aggiungere il seguente codice:

In questo caso verranno escluse le pagine con ID 102, 103 e 104. Per trovare l’ID di un contenuto, in generale, è sufficiente controllare l’indirizzo al momento della modifica. Modificando un articolo si avrà un indirizzo del tipo post.php?post=102&action=edit

Il 102 è l’ID del contenuto.

In maniera analoga per YoastSEO è sufficiente aggiungere il seguente codice:

In entrambi i casi i contenuti con l’ID coinvolto non verranno più inseriti nella sitemap.

[python] Calcolare le soluzioni di un sistema lineare di primo grado utilizzando il metodo di Cramer (senza librerie aggiuntive)

Obiettivo: Vogliamo calcolare, utilizzando Python, tutte le soluzioni per un sistema lineare di primo grado utilizzando le matrici e il metodo di Cramer. Per farlo non utilizzeremo librerie aggiuntive, se non quanto disponibile nativamente dentro Python.

Ovviamente lo scopo dell’esercizio è l’utilizzo di Python, visto che si potrebbe risolvere agilmente con librerie come SciPy e NumPy.

Supponiamo di avere un sistema lineare come quello seguente (l’ho scopiazzato spudoratamente da YouMath, dove c’è anche un’esaustiva spiegazione sul metodo di Cramer):

\begin{cases}2x+y+z=1 \\ 4x-y+z=-5 \\ -x+y+2z=5 \end{cases}

La matrice associata ai coefficienti ed il relativo determinante sarebbe questo:

\mbox{D}=\left| \begin{matrix} 2 & 1 & 1 \\ 4 & -1 & 1 \\ -1 & 1 & 2 \end{matrix}\right|=-12

Mentre la matrice dei termini noti sarebbe:

\mbox{A}=\left| \begin{matrix} 1 \\ -5 \\ 5 \end{matrix}\right|

Giusto per curiosità la soluzione immediata con NumPy sarebbe la seguente:

Il risultato nel caso specifico darà: [-1. 2. 1.]

Noi vogliamo costruire qualcosa di simile in Python 2.7.

Cominciamo creando la base della nostra classe perché possa accettare i medesimi argomenti:

Fatto questo cominciamo a creare i metodi di cui avremo bisogno. Il metodo di Creamer con il calcolo del determinante implica, per matrici di dimensione superiore a 2×2, che si debba poter ridurre la matrice in sottomatrici.

Giusto per chiarezza, nel caso del determinante D della suddetta matrice, il calcolo si svolgerebbe in questo modo:

\mbox{D}=\left| \begin{matrix} 2 & 1 & 1 \\ 4 & -1 & 1 \\ -1 & 1 & 2 \end{matrix}\right|= 2 * \left| \begin{matrix} -1 & 1 \\ 1 & 2 \end{matrix}\right| - 1 * \left| \begin{matrix} 4 & 1 \\ -1 & 2 \end{matrix}\right| + 1 * \left| \begin{matrix} 4 & -1 \\ -1 & 1\end{matrix}\right| =\newline = 2*(-1*2-1*1)-1*(4*2-(-1)*1)+1*(4*1-(-1)*(-1)) = \newline = 2*(-3)-1*(9)+1*(3)=\newline =-6-9+3=-12

Ogni sottomatrice prende tutti i valori della matrice corrente eccetto quelli nella riga e nella colonna della posizione attuale. Scriviamo quindi la nostra funzione nella maniera seguente:

Per calcolare il determinante vogliamo fare due operazioni distinte: il calcolo per matrici 2×2 e il calcolo per riduzione delle matrici di dimensione superiore. Iniziamo scrivendo l’operazione per quelle 2×2:

Per calcolare gli altri determinanti procederemo invece con:

In particolare con (1-2*(c%2)) calcoliamo il segno per ogni elemento della prima riga. In particolare ricordiamo che gli elementi saranno calcolati in ordine da 0, 1, 2, 3, 4 ecc. Se calcoliamo il resto per ognuno di essi avremo 0, 1, 0, 1, 0 ecc. Eseguendo la suddetta operazione avremo quindi 1-0, 1-2, 1-0, 1-2, 1-0 ecc. Questo ci darà i segni come 1, -1, 1, -1, 1 ecc.

A questo punto ci manca solo un metodo che ci permetta di creare nuove matrici per calcolare i vari determinanti per x, y, z ecc. Ricordiamoci che i vari risultati saranno dati da:

x=\frac{\mbox{D}_x}{\mbox{D}}=\frac{12}{-12}=-1\\ \\ \\ y=\frac{\mbox{D}_y}{\mbox{D}}=\frac{-24}{-12}=2\\ \\ \\ z=\frac{\mbox{D}_z}{\mbox{D}}=\frac{-12}{-12}=1

Dobbiamo fare attenzione ad un dettaglio importante. In Python le liste vengono passate per riferimento, questo vuol dire che modificando ogni lista “copiata” si modifica in realtà la lista originale all’indirizzo di memoria. Per copiare una matrice multidimensionale è necessario quindi copiare i singoli valori nella nuova matrice, nella maniera seguente darebbe errore:

Quindi procediamo in questo modo:

La nostra funzione di sostituzione sostituirà quindi i termini noti nella colonna preselezionata.

A questo punto possiamo scrivere il metodo che calcolerà la soluzione, alla maniera seguente:

Infine implementiamo il metodo solve aggiungendo un paio di chiamate di errore, nel caso in cui la matrice non sia adatta.

Nel suo complesso la classe che avremo creato sarà la seguente:

Per utilizzarla sarà sufficiente scrivere:

Se abbiamo fatto tutto correttamente il risultato che otterremo sarà: [-1.0, 2.0, 1.0]

Errori durante il file upload con PHP, Apache & nginx

Riallacciandomi al precedente articolo ([php] Configurare php.ini per l’upload dei file) voglio approfondire il problema del caricamento di file di grosse dimensioni su server che utilizzano PHP, Apache e nginx (nel mio caso specifico anche Plesk).

Gli errori che possono sorgere sono difatti innumerevoli e spesso apparentemente senza senso.

Cominciamo riepilogando il necessario per quello che riguarda il PHP. Come spiegato nel precedente articolo, assicuriamoci di avere una configurazione simile alla seguente nel file php.ini

In questo caso sto supponendo che caricheremo file fino a 512MB.

Per quanto riguarda il PHP ci dobbiamo assicurare che la quantità di memorie allocabile sia compatibile con la dimensione dei file da caricare e che lo sia anche il tempo di esecuzione.

Con un tempo di 1200 secondi si suppone che l’upload avverrà ad un minimo di 0,43MB/s. Questo significa che parte del caricamento dipende anche dalla velocità di upload del client, che potrebbe non essere sufficientemente alta da permettere al server di terminare l’operazione nei tempi consentiti.

Per inciso ricordiamoci che le classiche connessioni ADSL 20 Mega hanno upload che si aggirano attorno a 1 Mbit, ovvero 0,12 MB/s. Questo significa che il tempo di esecuzione dovrebbe essere per lo meno di 4.300 secondi (approssimando per eccesso).

Detto tutto questo si potrebbe incorrere in altri problemi, come ad esempio, lato client: Failed to load resource: net::ERR_HTTP2_PROTOCOL_ERROR

Se si sta tentando di gestire l’upload tramite javascript e si incorre in questo errore, esso nulla ha a che fare con il protocollo HTTP/2 (e tanto meno è utile tornare al HTTP/1.1 o simili), ma è legato al fatto che la pagina non invia una risposta corretta. La risposta non viene inviata correttamente perché ad interrompere l’upload possono essere Apache oppure nginx.

Controllando il log del server si potrebbe trovare infatti un errore simile al seguente: 19855#0: *532 client intended to send too large body: 180584796 bytes

In questo caso sto cercando di caricare circa 172MB di file ed nginix blocca l’operazione.

Nel mio caso specifico posso verificare la cosa, confrontando su Windows la dimensione dei file che sto tentando di inviare al server con un unico upload.

Si può notare come la dimensione bloccata sia leggermente più grande dei file in upload, perché, come già discusso nel precedente articolo, il corpo che viene inviato al server contiene anche informazioni aggiuntive che vanno al di là dei singoli file che si stanno caricando.

A questo punto dobbiamo intervenire su nginx aggiungendo l’istruzione:

La configurazione predefinite di nginx sarebbe di 1m, mentre sotto Plesk è di 128m.

Questo parametro può essere modificato all’interno del file /etc/nginx/nginx.conf

Per farlo su Plesk procediamo nel modo seguente (è anche spiegato nella vademecum ufficiale, anche se ci sono delle piccole incongruenze):

  1. Colleghiamoci via SSH al Server con Plesk
  2. Creiamo un file di configurazione aggiuntivo a cui aggiungeremo l’istruzione precedente: echo 'client_max_body_size 128m;' > /etc/nginx/conf.d/aa_client_max_body.conf
  3. Verifichiamo se esiste il file /usr/local/psa/admin/conf/panel.ini
  4. Se non dovesse esistere creiamolo copiandolo dal file predefinito: cp /usr/local/psa/admin/conf/panel.ini.sample /usr/local/psa/admin/conf/panel.ini
  5. Aggiungiamo l’impostazione per la massima dimensione del corpo: echo -e "[webserver]\n nginxClientMaxBodySize = 512m\n" >> /usr/local/psa/admin/conf/panel.ini
  6. Modifichiamo i permessi: chmod 644 /usr/local/psa/admin/conf/panel.ini
  7. Riconfiguriamo il tutto: plesk sbin httpdmng --reconfigure-all
  8. Riavviamo nginx: service nginx restart
  9. Assicuriamoci che su tutti i webserver sia configurato il parametro giusto: nginx -T | grep client_max_body_size
  10. Nel caso non lo fosse possiamo usare l’istruzione, per riconfigurare il tutto: plesk repair web -y -v

In generale dovremmo assicurarci che, rispetto ai parametri suddetti, nelle configurazioni di nginx, sotto la voce server, compaiano i seguenti due valori:

Questi valori dovrebbero essere in linea (o superiori) con quelli scelti per il PHP.

Infine dobbiamo verificare che anche Apache consenta l’esecuzione dell’upload. Nel caso specifico potrebbero esserci due parametri ad influenzarlo: FcgidMaxRequestLen  e LimitRequestBody

Impostiamoli nel modo seguente:

Se abbiamo configurato tutto correttamente dovremmo essere in grado di caricare i file come definito all’inizio.