Come si effettua l’upload dei files via PHP?

Di seguito riportiamo un semplice esempio di script per l’upload di file via browser

 

[box]

<?
/********************* VARIABILI DA SETTARE ********************/
 // Directory dove salvare i files Uploadati ( chmod 777 o permessi di scrittura, percorso assoluto)
 $upload_dir = $_SERVER["DOCUMENT_ROOT"] . "/upload";
// Eventuale nuovo nome da dare al file uploadato
 $new_name = "";
// Se $new_name è vuota, il nome sarà lo stesso del file uploadato
 $file_name = ($new_name) ? $new_name : $_FILES["upfile"]["name"];
if(trim($_FILES["upfile"]["name"]) == "") {
die("Non hai indicato il file da uploadare !");
}
if(@is_uploaded_file($_FILES["upfile"]["tmp_name"])) {
@move_uploaded_file($_FILES["upfile"]["tmp_name"], "$upload_dir/$file_name") 
 or die("Impossibile spostare il file, controlla l'esistenza o i permessi della directory dove fare l'upload.");
} else {
die("Problemi nell'upload del file " . $_FILES["upfile"]["name"]);
}
echo "L'upload del file " . $_FILES["upfile"]["name"] . " è avvenuto correttamente";
?>

[/box]

Autenticazione per invio email da script

Nel caso sia necessario inviare delle mail per mezzo di uno script (p.es., per inviare i dati raccolti attraverso un modulo on line), è necessario farlo autenticando l’invio.

L’autenticazione SMTP per la posta in uscita è necessario per garantire una maggior sicurezza ed evita lo spam in uscita.
Se non fosse necessaria l’autenticazione, per un utente esterno sarebbe infatti facile aggirare altri meccanismi di sicurezza, ed utilizzare lo strumento per inviare spam.

Per realizzare l’autenticazione SMTP, per quanto riguarda il form mail se si utilizza codice PHP non è sufficente utilizzare il comando mail()
Per creare un semplice invio mail con autenticazione SMTP  consigliamo di utilizzare la libreria opensource “phpmailer” con SMTP authentication . In rete vi sono numerosi esempi per utilizzarlo ed è molto pratico e facile da gestire.

Riferimenti:

Per mezzo di questa libreria è possibile inviare mail in formato HTML semplicemente abilitando l’opzione ed usare un tamplate predefinito oppure dichiararlo come body della mail.

Di seguito un semplice esempio

require_once('../class.phpmailer.php');
//include("class.smtp.php"); // opzionale, include la classe se non è già stata caricata

$mail             = new PHPMailer();

$body             = file_get_contents('contents.html'); //template mail html
$body             = eregi_replace("[\]",'',$body);

$mail->IsSMTP();
$mail->Host       = "mail.nomedominio.tdl"; // SMTP server
$mail->SMTPDebug  = 2;                     // opzionale, abilita debug SMTP
// 1 = errors and messages
// 2 = messages only
$mail->SMTPAuth   = true;                  // abilita SMTP authentication
$mail->Host       = "mail.nomedominio.tdl"; // dichiara il server SMTP
$mail->Username   = "nomecasella@nomedominio.tdl"; // SMTP account username
$mail->Password   = "tuapassword";        // SMTP account password

$mail->SetFrom('nomecasella@nomedominio.tdl', 'Nome Cognome');

$mail->AddReplyTo("nomecasella@nomedominio.tdl","Nome Cognome");

$mail->Subject    = "Oggetto della mail";

$mail->AltBody    = "messaggio alternativo per mail non HTML"; // opzionale

$mail->MsgHTML($body);

$address = "destinatario@dominiodestinatario.tdl";
$mail->AddAddress($address, "Nome Cognome Destinatario");

$mail->AddAttachment("percorsoAllegato");      // allegato, opzionale

if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";

Invio Email dal sito (con PhpMailer per php5)

<?php

function sendMail($from, $subject, $body, $to, $debug, $attach){
require_once(“include/mailPx/class.phpmailer.php”);
$mail = new PHPMailer(true); // the true param means it will throw exceptions on errors, which we need to catch
if($debug){
//require_once(“class.smtp.php”);
try {
$mail->IsSMTP();
$mail->SMTPDebug  = 2;   // enables SMTP debug information (for testing)
// 1 = errors and messages
// 2 = messages only
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->Host       = “mail.DOMINIO”; // sets the SMTP server
$mail->Port       = 25;                    //
$mail->Username   = “admin@DOMINIO”; // SMTP account username
$mail->Password   = “PASSWORD”;        // SMTP account password
$mail->AddReplyTo($from, ‘DOMINIO’);
$mail->AddAddress($to, ‘Gentile Cliente’);
$mail->SetFrom($from, ‘DOMINIO’);
$mail->Subject = $subject;
$mail->AltBody = strip_tags(str_replace(‘<br>’,’\n’,$body)); // optional – MsgHTML will create an alternate automatically
$mail->MsgHTML($body);
$mail->IsHTML(true);
if($attach!=””){
$mail->AddAttachment($attach);
}
$mail->Send();
echo “ok”;
} catch (phpmailerException $e) {
echo $e->errorMessage(); //Pretty error messages from PHPMailer
} catch (Exception $e) {
echo $e->getMessage(); //Boring error messages from anything else!
}
}
}
sendMail(“admin@Dominio.ext”, “XXXXXXX: soggetto”, “messaggio<br>xxxxxxxxx“, “emaildestinatario@dominiodestinatario”, 1 ,”);

?>

Che differenza c’e’ tra Windows e Linux?

Il sistema operativo del tuo PC è del tutto irrilevante nella scelta del sistema operativo del server che ospiterà il tuo sito. Non devi preoccuparti se usi Windows XP, 7, Linux o Mac, l’importante è che tu sappia quali supporti e quali tecnologie puoi utilizzare sulle due piattaforme.

I motivi principali che solitamente influenzano la scelta della piattaforma di hosting sono i seguenti:

  • il numero degli applicativi “Open Source” e’ molto più ampio sulla piattaforma Linux;
  • i linguaggi ASP, ASP.NET, Access possono essere supportati solo su piattaforma Windows 2000/2003/2008
  • PHP è supportato sia in ambiente Windows che Linux, ma il supporto in ambiente Linux è più completo e performante. Quindi, se prevedi di fare un uso intensivo di PHP è consigliabile indirizzarsi su una piattaforma Linux
  • molti CMS (WordPress e Joomla, ad esempio) in ambiente Windows possono dare diversi problemi; anche in questo caso, se si prevedi di usarli è consigliabile la piattaforma Linux
  • i nomi dei file con gli spazi “nome file.htm” sono supportati solo sui server Windows

 

Fatal error: Allowed memory size of x bytes exhausted (tried to allocate y bytes) in yyyyyy on line zzz

Questo è un messaggio d’errore abbastanza diffuso.

Normalmente si presenta come:

 

[box] Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate yyy bytes) in script.php on line zzz[/box]

yyy può essere un valore qualsiasi (normalmente basso, poche decine di bytes)

script.php indicherà l’URL completo dello script che è andato in errore

zzz sarà la linea dello script che ha causato l’errore

L’errore è banalmente determinato dall’esaurimento della memoria RAM allocata ed utilizzabile. Ciò può esser causato da:

  • un bug del codice che effettua chiamate ricorsive, determinando quindi un esaurimento di risorse
  • la presenza nel codice di malware che determina un consumo di risorse eccessivo
  • codice non ottimizzato
  • oppure infine dalla effettiva necessità di maggiori risorse per il vostro sito rispetto a quelle disponibili

Nei primi tre casi: dovete effettuare un’analisi del codice, relativo debug, individuare il problema e risolverlo.

[box type=”warning”] NOTA: se utilizzate un CMS tipo WordPress, Joomla, Drupal esistono delle casistiche abbastanza comuni che determinano questo tipo di errore; consigliamo di fare riferimento agli specifici forum di supporto[/box]

Nel quarto caso, contattate il nostro ufficio commerciale per valutare le possibili soluzioni.