Newsgroup: it.comp.www.php
Titolo: Problema - invio curriculum da web

Salve a tutti,
ho un grandissimo problema che mi tormenta da due giorni.
Devo fare un sito con un form che permetta agli utenti di inviare il
proprio curriculum in formato DOC (o ZIP, o qualsiasi altro: per il momento
non mi importa discriminare sul tipo di file).
Ad ogni modo, il problema è appunto che devo permettere all'utente di
seleazionare un file dal proprio hard disk (tramite un campo "file" del
form) e di *allegarlo* ad una mail indirizzata al titolare del sito.
Questo è il mio form (form.php), opportunamente semplificato:
---------------------------------------------------------
<form name="curriculumForm" method="post" action="processCurriculum.php"
enctype="multipart/form-data">
<table cellpadding="0" cellspacing="0" border="0">
   <tr>
      <td class="text">Nome* &nbsp;</td>
      <td><input name="nome" type="text"></td>
      <td class="text">Cognome* &nbsp;</td>
      <td><input name="cognome" type="text"></td>
   </tr>
   <tr>
      <td>Curriculum</td>
      <td><input name="curriculum" type="file"></td>
      <td></td>
      <td></td>
   </tr>
   <tr>
      <td colspan="4"><input type="submit" value="Invia"></td>
   </tr>
</table>
</form>
---------------------------------------------------------
Questa (cfMailFile.php) è la classe che sto cercando di utilizzare
(disponibile su 
http://renoir.vill.edu/~ylee/mailfile.html
):
---------------------------------------------------------
<?
class CMailFile {
	var $subject;
	var $addr_to;
	var $text_body;
	var $text_encoded;
	var $mime_headers;
	var $mime_boundary = "--==================_846811060==_";
	var $smtp_headers;
 
	function CMailFile($subject,$to,$from,$msg,$filename,$mimetype =
"application/octet-stream", $mime_filename = false) {
		$this->subject = $subject;
		$this->addr_to = $to;
		$this->smtp_headers = $this->write_smtpheaders($from);
		$this->text_body = $this->write_body($msg);
		$this->text_encoded = $this->attach_file($filename,$mimetype,$mime_filename);
		$this->mime_headers = $this->write_mimeheaders($filename, $mime_filename);
	}
	function attach_file($filename,$mimetype,$mime_filename) {
		$encoded = $this->encode_file($filename);
		if ($mime_filename) $filename = $mime_filename;
		$out = "--" . $this->mime_boundary . "\n";
		$out = $out . "Content-type: " . $mimetype . "; name=\"$filename\";\n";		
		$out = $out . "Content-Transfer-Encoding: base64\n";
		$out = $out . "Content-disposition: attachment; filename=\"$filename\"\n\n";
		$out = $out . $encoded . "\n";
		$out = $out . "--" . $this->mime_boundary . "--" . "\n";
		return $out; 
// added -- to notify email client attachment is done
	}
	function encode_file($sourcefile) {
		if (is_readable($sourcefile)) {
			$fd = fopen($sourcefile, "r");
			$contents = fread($fd, filesize($sourcefile));
			$encoded = my_chunk_split(base64_encode($contents));
			fclose($fd);	
		}
		return $encoded;
	}
	function sendfile() {
		$headers = $this->smtp_headers . $this->mime_headers;
		$message = $this->text_body . $this->text_encoded;
		mail($this->addr_to,$this->subject,$message,$headers);
	}
	function write_body($msgtext) {
		$out = "--" . $this->mime_boundary . "\n";
		$out = $out . "Content-Type: text/plain; charset=\"us-ascii\"\n\n";
		$out = $out . $msgtext . "\n";
		return $out;
	}
	function write_mimeheaders($filename, $mime_filename) {
		if ($mime_filename) $filename = $mime_filename;
		$out = "MIME-version: 1.0\n";
		$out = $out . "Content-type: multipart/mixed; ";
		$out = $out . "boundary=\"$this->mime_boundary\"\n";
		$out = $out . "Content-transfer-encoding: 7BIT\n";
		$out = $out . "X-attachments: $filename;\n\n";
		return $out;
	}
	function write_smtpheaders($addr_from) {
		$out = "From: $addr_from\n";
		$out = $out . "Reply-To: $addr_from\n";
		$out = $out . "X-Mailer: PHP3\n";
		$out = $out . "X-Sender: $addr_from\n";
		return $out;
	}
}
// usage - mimetype example "image/gif"
// $mailfile = new
CMailFile($subject,$sendto,$replyto,$message,$filename,$mimetype);
// $mailfile->sendfile();
// Splits a string by RFC2045 semantics (76 chars per line, end with \r\n).
// This is not in all PHP versions so I define one here manuall.
function my_chunk_split($str)
{
	$stmp = $str;
	$len = strlen($stmp);
	$out = "";
	while ($len > 0) {
		if ($len >= 76) {
			$out = $out . substr($stmp, 0, 76) . "\r\n";
			$stmp = substr($stmp, 76);
			$len = $len - 76;
		}
		else {
			$out = $out . $stmp . "\r\n";
			$stmp = ""; $len = 0;
		}
	}
	return $out;
}
?>
---------------------------------------------------------
Questo, infine, è il mio script (processCurriculum.php) che processa il
form e dovrebbe mandare la mail appoggiandosi alla classe riportata sopra:
---------------------------------------------------------
<?
   include('cfMailFile.php');
   $destinatario = "
st...@syntax.it
";
   $titolo = "CURRICULUM da SITO WEB";
   $contenuto = $nome ." ". $cognome;
   $newmail = new
CMailFile($titolo,$destinatario,"
s.ro...@syntax.it
",$contenuto,$req_Curriculum,"application/octet-stream");
   $newmail->sendfile();
?>
---------------------------------------------------------
Ovviamente il problema è che non funziona.
Gli errori che mi tornano sono questi:
Warning: open_basedir restriction in effect. File is in wrong directory in
/usr/local/psa/home/vhosts/
satef.com/httpdocs/nuovo/cfMailFile.php
 on line 55
Warning: fopen("/tmp/phpKFHa3z", "r") - Operation not permitted in
/usr/local/psa/home/vhosts/
satef.com/httpdocs/nuovo/cfMailFile.php
 on line 55
Warning: Supplied argument is not a valid File-Handle resource in
/usr/local/psa/home/vhosts/
satef.com/httpdocs/nuovo/cfMailFile.php
 on line 56
Warning: Supplied argument is not a valid File-Handle resource in
/usr/local/psa/home/vhosts/
satef.com/httpdocs/nuovo/cfMailFile.php
 on line 58
Potete aiutarmi please?
(Visto che sto scrivendo al forum tramite interfaccia web, se ci dovessero
essere problemi nel decifrare il codice che ho incollato fatemelo sapere
please!)
Grazie a tutti, davvero!
Stex
_____________________________
Inviato da 
www.mynewsgate.net

 /usr/local/psa/home/vhosts/
satef.com/httpdocs/nuovo/cfMailFile.php
 on line 55
sembra che hai un problema con i diritti di lettura sul file uploadato
prova a spostare il file (uploadato) dentro la tua directory prima di
farlo leggere dalla classe (confronta
http://www.php.net/manual/en/features.file-upload.php
). segue es:
<?PHP
$uploaddir = '/usr/local/psa/home/vhosts/
satef.com/httpdocs/nuovo/
';
if (move_uploaded_file ($_FILES['userfile']['tmp_name'],
                        $uploaddir . $_FILES['userfile']['name'])) {
    $newmail = new CMailFile ($titolo,
                             $destinatario,
                             "
s.ro...@syntax.it
",
                             $contenuto,
                             $uploaddir .
$_FILES['userfile']['name']),
                             "application/octet-stream");
    $newmail->sendfile();
} // if
?>