sabato 25 luglio 2009

PHP: rinominare file con estensione

PROBLEMA: Eseguire l'upload di un file il cui nome è già presente nella directory di destinazione sul server.

UNA POSSIBILE SOLUZIONE: rinominare il file aggiungendo alla fine la data e l'ora (si suppone che nello stesso secondo non possano avvenire due upload in contemporanea -> OK nei siti con pochi accessi). Esempio:
il file che voglio caricare si chiama pippo.jpg, ma sul server già esiste un file con lo stesso nome. Il file sarà rinominato in:
pippo_1:51:05-22.07.09.jpg
Vogliamo inoltre tener conto della situazione in cui il file non possiede un'estensione, in questo caso il file pippo sarà rinominato in:
pippo_1:51:05-22.07.09

CODIFICA
: non è possibile semplicemente aggiungere data e ora alla fine del file perchè il risultato sarebbe il seguente:
pippo.jpg_1:51:05-22.07.09
L'idea è quella di separare il nome del file dall'estensione, rinominare solo il nome del file e infine aggiungere l'estensione al file rinominato.
Tralasciamo il codice per eseguire l'upload e chiamiamo $fname la variabile che contiene il nome del file che sta per essere caricato.
(in breve sia
<input type="file" name="user_file" />
$file = $_FILES['user_file'];
$fname = $file['name']
)
Ora veniamo al codice:
if (file_exists($filename)) {
//FILE GIA ESISTENTE, lo rinominiamo per non sostituirlo
// ricava l'estensione dal file
$estensione_file=estensione($fname);
//taglia l'estensione dal file
$fname=cut_extension($fname);
// assegna un nome univoco al file rinominando il nome del file e aggiungendo alla fine l'estensione
$fname=rename_file($fname).".".$estensione_file;
}
Di seguito le funzioni estensione, cut_extension, rename_file:
function estensione($nome){
$trova_punto = explode(".", $nome);
$estensione = $trova_punto[count($trova_punto) - 1];
$estensione = strtolower($estensione);
if (isset($trova_punto[1]) == FALSE){
return ""; //NESSUNA ESTENSIONE
}
return $estensione;
}

function cut_extension($nome){
$trova_punto = explode(".", $nome);
if(count($trova_punto)==1){//ALLORA é UN FILE CHE NON HA ESTENSIONE
$new_nome=$trova_punto[0];
}
else{
for($i=0;$i<count($trova_punto)-1;$i++){
$new_nome.=$trova_punto[$i];
//nel caso il file contenga più punti ripristina i punti centrali
if($i<count($trova_punto)-2)
$new_nome.=".";
}
}
return $new_nome;

function rename_file($file){
$suffisso= date("_g:i:s-d.m.y");
$new_file_name=$file.$suffisso;
return $new_file_name;
}

domenica 1 marzo 2009

Installare Adempiere ERP su Ubuntu

Un breve tutorial sull'installazione del software ERP open source Adempiere. Ho installato con successo Adempiere su Ubuntu 8.10 con JDK 5.

File necessari:

  • Adempiere (lo trovi qui)

  • PlSql per Postgres 8.3 (lo trovi qui)

  • JDK 5/6 (JRE non va bene)

  • PostgreSql 8.3

Per ora ci servirà scaricare solo il pacchetto Adempiere e PlSql. Per quanto riguarda gli altri file, utilizzeremo delle versioni precompilate per Ubuntu, disponibili nei repository ufficiali.

Installazione JDK

installare il pacchetto

sun-java6-jdk

se si verificano dei problemi nei passi successivi installare

sun-java5-jdk

ed impostare come jdk predefinita la versione 5 con i seguenti comandi:

java -version

selezionare la versione 5 dopo aver dato i comandi:

sudo update-alternatives --config javac

sudo update-alternatives --config java

digitare:

java -version

per verificare che sia attiva la jdk5.


Aggiungere le variabili d'ambiente

Modificare il file nascosto profile contenuto nella directory home:

gedit /home/roberto/.profile

aggiungendo i seguenti path alla fine del file:

export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun/

export ADEMPIERE_HOME=/home/roberto/Programmi/Adempiere/

disconnettersi da Ubuntu e riconnettersi per rendere effettive le modifiche.


Installazione Postgresql e PlJava

Da Sistema->Amministrazione->Gestione pacchetti synaptics installare:

  • postgresql (e pacchetti dipendenti)

  • pgadmin3 (e pacchetti dipendenti)


Scaricare PlJava

dal sito http://pgfoundry.org/frs/download.php/1598/pljava-i686-pc-linux-gnu-pg8.3-1.4.0.tar.gz

scaricare la versione appropriata per la versione di Postgresql installata.

Ad esempio nel caso in cui si installa Postgresql 8.3, scaricare il file:

pljava-i686-pc-linux-gnu-pg8.3-1.4.0.tar.gz

[For 64bit users, download from pljava64bit from Sim IT Sdn Bhd]


Terminata l'installazione di postgresql aprire il terminale e loggarsi come root:

sudo su -

impostare la password per l'utente (creato durante l'installazione del DB) postgres:

passwd postgres

esportare la variabile JAVA_HOME (se è stata installata un'altra versione di java, verificare il percorso):

export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun/


Creare un nuovo host (in Adempiere non è possibile usare localhost). Creeremo un host con indirizzo 127.0.0.2:

sudo gedit /etc/hosts

e aggiungere la riga:

127.0.0.2 roberto-laptop

dove roberto-laptop è il nome del computer (il nome del tuo computer lo puoi ricavare aprendo il terminale).

In questo modo possiamo configurare anche altri computer in modo che raggiungano i nostri servizi.


Modificare il file pg_pass.hba:

gedit /etc/postgresql/8.2/main/pg_hba.conf

cambiare il metodo di autenticazione da md5 a trust e aggiungere la riga evidenziata in rosso:

# Database administrative login by UNIX sockets
local all postgres trust
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
host all all 127.0.0.2/32 trust
# IPv6 local connections:
host all all ::1/128 trust


Estrarre l'archivio pljava, scaricato prima, in /opt/pljava:

sudo mkdir /opt/pljava

sudo cp pljava-i686-pc-linux-gnu-pg8.3-1.4.0.tar.gz /opt/pljava

cd /opt/pljava

sudo tar xzvf pljava-i686-pc-linux-gnu-pg8.3-1.4.0.tar.gz


Editare il file postgres.conf:

gedit /etc/postgresql/8.2/main/postgresql.conf

sostituire la riga

#listen_addresses = 'localhost'

con:

listen_addresses = '*'

ricordarsi di decommentare la riga togliendo il #.

Inoltre, sempre in questo file (postgresql.conf) aggiungere le seguenti righe:

dynamic_library_path = '\$libdir:/opt/pljava'
custom_variable_classes = 'pljava'
pljava.classpath = '/opt/pljava/pljava.jar'


Editare il file:

gedit /etc/ld.so.conf

aggiungere le righe:

$JAVA_HOME/jre/lib/i386
$JAVA_HOME/jre/lib/i386/client
$JAVA_HOME/jre/lib/i386/native_threads
$JAVA_HOME/jre/lib/i386/server

digitare il comando seguente per ricaricare la configurazione:

ldconfig

riavviare il server di postgresql:

sudo su – postgres

/etc/init.d/postgresql-8.3 restart


Avviare pgAdminIII (Applicazioni->Strumenti di sistema->pgAdmin III)

Registrare un nuovo server come mostrato nella figura seguente:

come password usare la stessa dell'utente postgres creata prima con il comando passwd postgres.

Nome: postgres

Host: 127.0.0.2

Nome utente: postgres

Password:


Creare un nuovo ruolo e un nuovo database

Per il nuovo ruolo scegliere come nome adempiere e come password adempiere (vedi figura seguente):

creare un nuovo database chiamato adempiere, come in figura:

Alternativamente è possibile il database usando la shell:

sudo su – postgres

createdb -E UTF8 -O adempiere adempiere




Installazione Pljava

loggarsi al terminale come root:

sudo su -

estrarre l'archivio Adempiere_353a.tar.gz in /home/roberto/Adempiere

(al posto di roberto utilizzare il nome della vostra home directory)


copiare il file postgresql.jar in /opt/pljava

cp /home/roberto/Adempiere/lib/postgresql.jar /opt/pljava

cd /opt/pljava

eseguire il seguente comando:

java -cp postgresql.jar:pljava.jar:deploy.jar org.postgresql.pljava.deploy.Deployer -database adempiere -user adempiere -password adempiere -install


Importare il dump del database

In poche parole bisogna popolare il database adempiere creato prima con tutte le tabelle e tutto ciò che è necessario per il funzionamento di Adempiere (ricordiamo che Adempiere per funzionare ha bisogno di un database. In questo caso abbiamo scelto di usare PostgreSql ma è possibile usarne altri).

  • Avviare pgAdmin III dal menu

  • connettersi al server

  • selezionare il database Adempiere ed eliminare con cascade lo schema sqlj (se non ci riuscite saltate questo passo)

  • aprire il terminale e digitare:

sudo su - postgres

psql -d adempiere < /home/roberto/Adempiere/data/Adempiere_pg.dmp


Installare Adempiere

cd $ADEMPIERE_HOME

sh RUN_setup.sh

si avvierà una schermata in cui si dovranno inserire delle informazioni:

  • tipo di database: postgres

  • user database: adempiere

  • porta 80 oppure 8080

  • porta ssl 443 oppure 5223

  • porta db: 5432

  • database name: adempiere (o template1 non ricordo bene)

  • password database: adempiere


Cliccare su test, se tutto ok cliccare su save. Trascorreranno circa 5 minuti, controllare nel terminale che non si verifichino degli errori. Alla fine del processo dovrebbe apparire la scritta BUILD SUCCESSFULLY in 5 min...


Avviare il server di Adempiere:

sh $ADEMPIERE_HOME/utils/RUN_Server2.sh

l'avvio richiede circa 5 minuti.

Quando termina l'avvio del server uscirà la scritta started in 5min... se vengono visualizzati degli errori che riguardano l'invio di e-mail non riuscito, ignorarli. Non chiudere questa shell.

Aprire una nuova shell e avviare Adempiere con il seguente comando:

sh $ADEMPIERE_HOME/RUN_Adempiere.sh

Si aprirà una finestra con un campo evidenziato in rosa. Cliccare su tale campo ed effettuare il test dell'applicazione e del database (ricordo di usare roberto-laptop nel campo host). Confermare tutto e cliccare sulla spunta verde per avviare Adempiere.


Creare un ordine di acquisto per verificare che PlJava funzioni correttamente:

  • Login to Adempiere as GardenAdmin with password GardenAdmin. On the next screen accept the defaults and click the green tick. The Java Client will open!

  • Select Menu tab

  • Select Requisition-to-Invoice / Purchase Order

  • A new record will open with the Business Partner field in pink

  • Click the icon at the end of the Business Partner and a Business Partner Info window will open

  • Press Enter and all the Business Partners will show

  • Highlight Tree Farm or another partner, and click the green tick

  • On the left menu, select PO Line

  • Click icon on the end of the Product field and the Product Info window will open

  • Press Enter and all the Products should appear. If the Products do appear the PL/Java is operational. If the Products do not appear then your PL/Java is not working and you need to check that you have activated PL/Java in the method above!

To Exit:

  • Click the red cross to Exit

  • Close the Purchase Order window to Exit this PL/Java confirmation test.


Chiudere Adempiere

Per chiudere adempiere, basta chiudere l'applicazione e stoppare il server.

Aprire un nuovo terminale e digitare:

sh $ADEMPIERE_HOME/utils/RUN_Server2Stop.sh

FONTI:

http://ubuntuforums.org/showthread.php?t=725933

http://www.adempiere.com/wiki/index.php/Install_on_Ubuntu_8.10


martedì 10 febbraio 2009

Scrivere uno slackbuild per slackware...

Oggi vedremo come scrivere correttamente uno slackbuild per slackware. Innanzitutto cerchiamo di capire alcune cose fondamentali, altre distro come ad esempio ubuntu, debian, mandriva hanno pacchetti precompilati che vengono distribuiti liberamente. In slackware non funziona così, o meglio non proprio! Nel caso non si riesca a trovare un pacchetto cercato c'è bisogno di compilarlo a "mano" con i classici comandi che tutti sappiamo. Ma il problema è che, come succede in un'altra qualsiasi distro, una volta che un pacchetto viene compilato dai sorgenti e viene installato con il comando make install, si perde traccia dei file installati nel sistema e quando lo si vuole rimuovere (nel caso in cui non sia presente il comando make uninstall) non si sa più dove cercare i file da rimuovere. Per ovviare a tutte queste difficolta nasce lo slackbuild. Noi tutti sappiamo che i pacchetti slackware terminano in tgz, quindi per tener traccia di un programma bisognerebbe ricavare dai sorgenti il pacchetto tgz e poi installarlo con installpkg in questa maniera si terra traccia dei file e una volta che si vorrà rimuovere il pacchetto basta dare il comando removepkg ed è lui che si occuperà di rimuovere tutti i file associati al pacchetto. Lo slackbuild altro non è che uno script. Vediamo un esempio e cerchiamo di capirne il funzionamento. Questo è uno slackbuild scritto da me per il programma basket (un efficiente notepad molto meglio di klipper):
#!/bin/sh
CWD=`pwd` #cartella corrente
TMP=${TMP:-/tmp/tgz} #crea una variabile con la cartella /tmp/tgz solo nel caso non esiste
PKG=$TMP/package #variabile per il pacchetto
NAME=basket #variabile nome pacchetto
VERSION=1.0.3.1 #variabile versione pacchetto
CHOST=i486
ARCH=${ARCH:-i486} #imposta l'architettura nel caso non sia specificata
BUILD=1ac # variabili release e iniziali di colui che crea il pacchetto

#qui di seguito un serie di semplici if per determinare i flags da aggiungere in fase di compilazione
if [ "$ARCH" = "i386" ]; then
SLKCFLAGS="-O2 -march=i386 -mcpu=i686"
elif [ "$ARCH" = "i486" ]; then
SLKCFLAGS="-O2 -march=i486 -mtune=i686"
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2"
elif [ "$ARCH" = "s390" ]; then
SLKCFLAGS="-O2"
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2"
fi

#qui creaiamo le cartelle temporanee se non esistono
if [ ! -d $TMP ]; then
mkdir -p $TMP
fi
if [ ! -d $PKG ]; then
mkdir -p $PKG
fi


cd $TMP
tar xzvf $CWD/$NAME-$VERSION.tar.gz #scompattiamo i sorgenti
cd $NAME-$VERSION #entriamo nella cartella scompattata
chmod -R u+w,go+r-w,a-s . # aggiustiamo i permessi ai file
chown -R root:root . # aggiustiamo i permessi ai file
CFLAGS="$SLKCFLAGS" \ # configuriamo il pacchetto con configure passando i flag che avevamo aggiunto
CXXFLAGS="$SLKCFLAGS" \
./configure --prefix=/usr \
--disable-debug \
--program-prefix= \
--program-suffix= \
--build=$CHOST-slackware-linux
make #compiliamo il pacchetto
make install DESTDIR=$PKG #installiamo il pacchetto nella cartella temporanea creata precedentemente
mkdir -p $PKG/usr/doc/$NAME-$VERSION #creiamo la cartella che dove copieremo la documentazione
cp -a AUTHORS COPYING ChangeLog INSTALL NEWS README TODO $PKG/usr/doc/$NAME-$VERSION #copiamo la documentazione
cd $PKG #entriamo nella cartella creata
find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null # strippiamo (una sorta di compressione) tutti gli eseguibile e tutte le librerie questi comandi cercano tutte le librerie e le filtrano per tipi di file e infine le strippano
find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
mkdir -p $PKG/install # crea la cartella install dove andranno i file contenenti le descrizioni del pacchetto e il file doinst.sh
cat $CWD/slack-desc > $PKG/install/slack-desc
cat $CWD/slack-desc > $PKG/usr/doc/$NAME-$VERSION/slack-desc
cat $CWD/$NAME.SlackBuild > $PKG/usr/doc/$NAME-$VERSION/$NAME.SlackBuild
requiredbuilder -v -y -s $CWD $PKG # requirebuilder si occupa di trovare le dipendenze (se ne puo fare a meno se non avete requirebuilder installato
makepkg -l y -c n $CWD/$NAME-$VERSION-$ARCH-$BUILD.tgz # questo e il comando che crea il pacchetto

if [ "$1" = "--cleanup" ]; then
rm -rf $TMP #rimozione delle cartelle temporanee
fi
Una volta salvato questo script "basket.Slackbuild" basta dare il comando (attenzione ad aver scaricato i sorgenti) "sh basket.Slackbuild" e ci ritroveremo dopo un po di scritte il pacchetto compilato nella stessa cartella in cui siamo. Poi basta dare il comando "installpkg nome_pacchetto.tgz" e il nostro programma sarà installato correttamente...Alla prossima!

giovedì 5 febbraio 2009

Strumenti per la progettazione di un database: MySQL Workbench

Prima di tutto vorrei fare un breve accenno sulla teoria che riguarda la progettazione dei database...

mercoledì 4 febbraio 2009

Il mio primo post

Questo è il mio primo post. Ancora non so cosa voglio fare su questo sito, per ora nulla, poi vediamo...