Il PHP dell'hosting Windows su Aruba.it è un po' limitato: mancano le librerie per l'elaborazione grafica1) e non è possibile richiamare eseguibili esterni come imagemagick (il problema credo sia l'interprete dei comandi2) bloccato!)
A questo aggiungiamo che non è possibile cambiare i diritti di accesso a file e cartelle da FTP!
Risultato? Molte applicazioni PHP non possono funzionare affatto oppure funzionano con dei limiti; magari non possono essere installate nella root o quanto meno in una cartella di nostra scelta…
La soluzione classica che trovate è: metti tutto nella cartella public! O quanto meno ci metti i dati… Non male, ma ci sono applicazioni che vogliono 3-4 cartelle per la scrittura; ed a meno di modifiche al codice non permettono di specificare dove metterle. Come se non bastasse ci si mette il SiteMap di Google, che DEVE essere nella cartella principale del sito e non in una sotto-cartella!
Aruba alla domanda ”dove faccio scrivere la mia web application” ti sa solo dire:
La soluzione invece si trova in una caratteristica di Windows: quando sposti una cartella i suoi diritti di accesso rimangono immutati!
Quindi per creare una cartella scrivibile dove serve a voi: create in “public” la cartella che volete rendere scrivibile, dopo di che con il vostro programma FTP spostatela altrove, dove vi serve!
MAGIA! La cartella rimane scrivibile!
Lo stesso vale per i file: un file creato in public rimane scrivibile se viene spostato fuori da public (però non deve mai essere cancellato, ma sovrascritto)
Quindi, per configurare DokuWiki:
Ok, mi direte a questo punto: “i diritti di accesso sono sistemati, ma la manipolazione delle immagini? Come fate?”
Per quella usiamo ASP.NET. Il sistema che abbiamo realizzato non è proprio pulitissimo, ma funziona egregiamente.
Lo rendiamo pubblico, ma ricordate che se Aruba non ha installato le librerie grafiche GD/GD2 avrà avuto i suoi motivi; è molto probabile che non le ha messe perché possono caricare eccessivamente il server, se usate a sproposito (cosa che Doku Wiki non fa, ad esempio).
Abbiamo creato una pagina apposita per far girare il tutto: resize delle immagini con ASP.NET
In alternativa il problema potrebbe essere risolto con imagemagick, se si trovasse un sistema di eseguire da PHP un programma evitando di usare la funzione system; quella funzione infatti usa la sua omonima del runtime C, la quale esegue tutto tramite l'interprete dei comandi3); ma sui servizi di hosting come Aruba l'interprete non si può eseguire!
Guardando la documentazione del PHP4) esistono anche altre funzioni per eseguire programmi esterni, anche se credo che molte di esse usano comunque l'interprete dei comandi: popen, exec, pcntl_exec, passthru
Purtroppo DokuWiki non esce con un sistema di backup integrato. Gli unici plugin esistenti non vanno bene: uno è per una vecchia versione di DokuWiki e fa un backup incompleto, l'altro è pensato solo per unix.
Tuttavia il plugin per la vecchia versione di DokuWiki, opportunamente modificato, permette di fare un backup rozzo ma efficace e completo dell'intera cartella dei dati.
La modifica consiste nell'eliminazione del filtro dei file: in pratica ora il plugin effettua il backup di tutto, compresa la cache. Nonostante tutto le dimensioni del backup non sono eccessive: Napoli Wireless ad esempio occupa circa 20 mega.
Per prima cosa si deve scaricare il plugin originale da qui: dokuwiki zip-backup plugin
Il codice modificato risiede tutto all'interno del file admin.php, nella funzione zip_create_backup().
function zip_create_backup() { global $conf; File_Archive::setOption("zipCompressionLevel",9); $stamp = date("Ymd"); $my_title = str_replace(' ', '', $conf['title']); $zip_name = "{$my_title}-$stamp.zip"; if (USE_CACHE) { $cache = new Cache_Lite( array( 'lifeTime' => 3600, 'cacheDir' => TMP_DIR ) ); File_Archive::setOption('cache', $cache); } else { if (!isset($_COOKIE['doku_zip_backup'])) { setcookie('doku_zip_backup', time(), time()+3600, '/'); } else if(file_exists(TMP_DIR.$zip_name)) { # This prevents the problem with double sending zip # files that seems to be a result of the way the # doku admin plugin architecture is constructed. if (isset($_COOKIE['doku_zip_now'])) return; setcookie('doku_zip_now', time(), time()+5, '/'); $_REQUEST['action'] = ''; $dir = opendir(TMP_DIR); while($file = readdir($dir)) { if (preg_match("@.zip$@", $file) && $zip_name != $file) { unlink(TMP_DIR.$file); } } closedir($dir); File_Archive::extract( File_Archive::read(TMP_DIR.$zip_name."/"), File_Archive::toArchive($zip_name, File_Archive::toOutput() ) ); exit; } } if (substr($conf['savedir'],0,1) == "/") { $dir = $conf['savedir']; } else { $dir = DOKU_INC.'/'.$conf['savedir']; } # This prevents the problem with double sending zip # files that seems to be a result of the way the # doku admin plugin architecture is constructed. if (isset($_COOKIE['doku_zip_now'])) return; setcookie('doku_zip_now', time(), time()+5, '/'); if (!USE_CACHE) { File_Archive::extract( File_Archive::filter( File_Archive::predTrue(), File_Archive::read($dir) ), $dest =TMP_DIR.$zip_name ); $dir = opendir(TMP_DIR); while($file = readdir($dir)) { if (preg_match("@.zip$@", $file) && $zip_name != $file) { unlink(TMP_DIR.$file); } } closedir($dir); } File_Archive::extract( File_Archive::filter( File_Archive::predTrue(), File_Archive::read($dir) ), File_Archive::toArchive($zip_name, File_Archive::toOutput() ) ); exit; }
Ed ecco il pacchetto già modificato che vi eviterà di dover fare un merge: dokuwiki_zip_plugin_mod.zip
Nota: questo plugin pare funzionare bene, ma è scritto un po' coi piedi e quindi non mi meraviglierei se facesse casini. Se fossi in voi dunque eviterei la funzione Restore…
Complimenti davvero per l'utilizzo di DokuWiki su Aruba, e in particolare per i suggerimenti (trucchi) di spostamenti cartelle che mantengono i premessi. Anch'io uso Aruba e sapevo della “ereditarietà” dei permessi (sottocartella public avrà gli stessi permessi public) - ma non avevo mai provato tramite FTP a trascinare altrove… Oltre ai complimenti per le ore di lavoro che hai dedicato a questo impianto di DokuWiki avrei due domande. La prima è: le librerie grafiche, la manipolazione delle immagini? - Sarà sicuramente mia ignoranza, dove DokuWiki manipola le immagini? Resize, rotate… E' strettamente necessaria questa parte? La seconda domanda … se non ha già perso la pazienza… Backup dati, ok, DokuWiki non esce col Backup… ma si potrebbe fare tramite FTP? Ok, brutale, ma funzionale credo… Ciao, e complimenti ancora!!!
Aggiunta: ho fatto l'installazione di dokuwiki (win/aruba) e funziona correttamente! Ma non ho messo mano alle librerie grafiche… Più facile del previsto!
Ora spero che non si schianti tutto quando ci saranno un po' di contenuti… il Backup lo faccio tramite FTP.
Un caro saluto e buona estate