Archive

Archive for the ‘Web’ Category

Apache: Request exceeded the limit of 10 internal redirects due to probable configuration error.

August 8th, 2011 Nicola No comments

Nel mio caso, questo errore riguardava una configurazione sbagliata nel file .htaccess, nella configurazione RewriteRule, in cui il percorso nel file era sbagliato:

RewriteRule ^(.*)$ index.php/$1 [L]

L’errore veniva generato dal fatto che il percorso al file index.php non era corretto.

Categories: Web Tags: ,

Ubuntu, apache2 e il modulo mod_rewrite

April 11th, 2009 Nicola No comments

Installando elgg ho dovuto abilitare il mod_rewrite di apache.

Per vedere se è già presente è sufficiente la funzione phpinfo, che restituisce, sotto la sezione apache2handler la voce Loaded Modules il modulo mod_rewrite.
Se non c’è, questo è quello che ho fatto per attivarlo:

sudo a2enmod rewrite
sudo /etc/init.d/apache2 restart

Poi ho aperto il file 000-default, nella directory /etc/apache2/sites-enabled, e modificato la riga

AllowOverride None

in

AllowOverride all

nel tag riferito al virtual host interessato (nel mio caso <Directory /var/www/>). Infine un ultimo riavvio di apache.

Categories: Linux, Web Tags: , , ,

Java e HttpURLConnection: upload di un file

March 24th, 2009 Nicola 3 comments

Partiamo dall’RFC 1867, che definisce le modalità con cui eseguire un upload verso una applicazione web.

http://www.ietf.org/rfc/rfc1867.txt

Non è il Signore del Anelli, ma è comunque una lettura interessante (e molto più corta), se vi interessa l’argomento.
Un piccolo sunto:

Nel paragrafo 6 del documento c’è un esempio che spiega quello che faremo poi in java. Questa è una form presente in una pagina HTML:

<FORM ACTION="http://server.dom/cgi/handle"
ENCTYPE="multipart/form-data"
METHOD=POST>
What is your name? <INPUT TYPE=TEXT NAME=submitter>
What files are you sending? <INPUT TYPE=FILE NAME=pics>
</FORM>

A fronte di questa form, in cui viene digitato “Joe Blow” alla domanda “What is your name” e file1.txt alla domanda”What files are you sending”, il client (browser o java nel nostro esempio) deve passare le seguenti informazioni:

Content-type: multipart/form-data, boundary=AaB03x

--AaB03x
content-disposition: form-data; name="field1"

Joe Blow
--AaB03x
content-disposition: form-data; name="pics"; filename="file1.txt"
Content-Type: text/plain

... contents of file1.txt ...
--AaB03x--

La variabile denominata boundary serve per delimitare il contenuto del file. Deve essere una stringa unica all’interno del MIME. Quando un post viene eseguito da un browser, è lui stesso che si preoccupa di questo.

Se l’utente avesse specificato anche una seconda immagine, ad esempio file2.gif, il cliente avrebbe dovuto comporre:

Content-type: multipart/form-data, boundary=AaB03x

--AaB03x
content-disposition: form-data; name="field1"

Joe Blow
--AaB03x
content-disposition: form-data; name="pics"
Content-type: multipart/mixed, boundary=BbC04y

--BbC04y
Content-disposition: attachment; filename="file1.txt"
Content-Type: text/plain

... contents of file1.txt ...
--BbC04y
Content-disposition: attachment; filename="file2.gif"

Content-type: image/gif
Content-Transfer-Encoding: binary

...contents of file2.gif...
--BbC04y--
--AaB03x--

Vengono usato due boundary, uno interno per delimitare i due file, ed uno esterno per delimitare il contenuto della form.
Quindi, attraverso le stringhe Content-disposition e Content-Type specifichiamo, di volta in volta, che tipo di dati stiamo passando nella chiamata POST, se campi, testo, immagini ecc…

Ecco come inviare, attraverso un client Java e la classe HttpURLConnection un file di testo.  Nel mio esempio l’url chiamato è una servlet:

HttpURLConnection conn = null;
DataOutputStream dos = null;
DataInputStream inStream = null;
String exsistingFileName = "C:\\spinea.txt";
int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;

//definisco un boundary
String lineEnd = "\r\n";
String twoHyphens = "--";
String boundary = "*****";

//Url da chiamare
String urlString = "http://localhost:8080/TestUpload/servletupload";

try {

// Apro una connessione alla mia servlet
URL url = new URL(urlString);
// Apro una conessione HTTP
conn = (HttpURLConnection) url.openConnection();
// Imposto alcuni parametri per la connessione
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection", "Keep-Alive");
//Il Content-Type della form
conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);

//Apro lo streaming verso la servlet
dos = new DataOutputStream( conn.getOutputStream() );

//Scrivo la prima riga
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"upload\";" + " filename=\"" + exsistingFileName +"\"" + lineEnd);
dos.writeBytes(lineEnd);

//Leggo il file di testo che devo inviare, e lo metto in un buffer.
//Nell'esempio qui sotto, viene definito un maxBufferSize,
//per limitare la grandezza del file che viene inviato.

int maxBufferSize = 1*1024*1024;
FileInputStream fileInputStream = new FileInputStream( new File("/home/nicola/documenti/prova.txt") );

//Creo un buffer con dimensione minima fra quella del file e quella impostata come massima.
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
buffer = new byte[bufferSize];

// leggo il file e invio i byte alla servlet
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
while (bytesRead > 0) {

dos.write(buffer, 0, bufferSize);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);bytesRead = fileInputStream.read(buffer, 0, bufferSize);

}

//Chiudo il file
fileInputStream.close();
//Invio il boundary per delimitare la fine del file
dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

//A questo punto devo rimanere in attesa della risposta della servlet, perchè altrimenti il file non sarà caricato
try {

inStream = new DataInputStream ( conn.getInputStream() );
String str;
while (( str = inStream.readLine()) != null) {

System.out.println("Server response is: "+str);
System.out.println("");

}
inStream.close();

}

catch (IOException ioex) {

System.out.println("From (ServerResponse): "+ioex);

}

}
//Seguono tutti i vari catch
catch (MalformedURLException ex) {

System.out.println("From ServletCom CLIENT REQUEST: " + ex);

}
catch (IOException ioe) {

System.out.println("From ServletCom CLIENT REQUEST:" + ioe);

}
catch (Exception ex) {

System.out.println("Eccezzione generica: " + ex);

}

Categories: Java, Web Tags: , , , ,

Kubuntu 8.10 e sopcast

January 24th, 2009 Nicola No comments

sopcast

Ecco come installare sopcast sullo stambecco intrepido con kde 4.1.

scaricate il file gtk-sopcast_0.2.8-1_i386.deb da qua:

http://linuxtoy.org/archives/gtk_sopcast.html

e installatelo. In ambiente grafico è sufficiente un doppio click per far partire l’installazione.
Una volta installato è sufficiente dire a sopcast quale player utilizzare. In rete ho letto che mplayer va benissimo, io avevo installato il vlc e ho provato con quello. E’ sufficiente, per fare il test con il vlc, andare nel pannello di configurazione e sostituire la voce Player che di default è

mplayer -ontop -geometry 100%:100%

in

vlc

Non sembra dare problemi di sorta.

Categories: Linux, Web Tags: ,

Ottenere lo user con il quale Apache accede a Linux

November 14th, 2008 Nicola No comments

Può capitare, come capita sempre a me, che quando si installano wordpress, joomla, drupal e compagnia, spesso e volentieri l’installazione si interrompe perchè non si hanno i permessi per scrivere nella cartella www di Apache.

Occorre importare come user della cartella lo stesso utente usato da Apache per accedere al file system. In generale, con un

sudo cat /etc/group

si riesce ad individuare lo user ed il gruppo relativo, e poi è sufficiente il

sudo chown -R user:group

per assegnarlo alla cartella interessata.

Un’altro modo carino, che ho trovato nel forum italiano di Ubuntu è quello di creare un un file php con il seguente codice:

<?php echo exec('whoami') ?>

Chiamata la pagina l’utente appare sullo schermo.

Categories: Web Tags: ,