CHMOD et Amen pour snews

Eléphant du PHP | 160 Messages

05 sept. 2006, 15:45

Bonjour,
Un utilisateur de votre forum m'avait aidé à réparer un bug lors de l'upload d'images vers Amen. Avec ce code:
$oldumask = umask(0); 
mkdir('../abonnes/images/'.$id.'/', 0777);  
umask($oldumask); 
J'essaye d'installer sNews et je rencontre cete erreur :
Warning: copy(): open_basedir restriction in effect. File(/tmp/phpff9B8r) is not within the allowed path(s): (.:/home/sites) in /home/sites/site2/web/snews14/snews.php on line 1665
Le code est le suivant :
//********
// IMAGES 
//********
function images() { 
	if (isset($_GET['image'])) {
		$file_to_delete = s('image_folder') ."/". $_GET['image'];
		unlink($file_to_delete); 
		echo "<h2>". l('deleted_success') ."</h2><p><a href='" .s('website'). "images/'>". l('back') ."</a></p>";
	} else { ?>
	<h2><? echo l('images'); ?></h2>
	<form name="imageformauthenticate" method="post" action="" enctype="multipart/form-data"></form>
	<form name="imageform" method="post" action="" enctype="multipart/form-data">
		<p><br /><? echo l('upload_image'); ?>:</p>
		<p><input type="file" name="imagefile" />
		<input type="submit" name="upload" value="<? echo l('upload'); ?>" /><br /></p>
	</form> <?
	if(isset( $_POST['upload'] )) {
		if ($_FILES['imagefile']['type']){ 
			$upload_dir = s('image_folder') ."/";	 
			copy ($_FILES['imagefile']['tmp_name'], $upload_dir .$_FILES['imagefile']['name']) or die ("Could not copy"); 
        	echo "<div class=\"".s('css_success')."\"><h2>" .l('operation_completed'). "</h2></div>";
			$kb_size = round(($_FILES['imagefile']['size'] / 1024), 1);
        	echo "<p><b>".$_FILES['imagefile']['name']. "</b>  [ " .$kb_size. " KB ] [ " .$_FILES['imagefile']['type']." ]";
    	} else {
            echo "<h2>" .l('admin_error'). "</h2>";
            echo "<p>" .l('image_error'). "</p>";
    	}
	} else {
		$upload_dir = s('image_folder') ."/";
    	$handle= opendir($upload_dir);
		$filelist = "";
		while ($file = readdir($handle)) {
   		if(!is_dir($file) && !is_link($file) && $file <> "Thumbs.db") {
	    	$filelist .= "<a href='$upload_dir$file'>".$file."</a> [ <a href='" .s('website'). "index.php?action=images&task=delete&image=" .$file. "'".if_javascript_on(" onclick='return confirm(\"".l('warning_delete')."\");'",'return').">Delete</a> ]<br />";
    }}
	echo "<h2>". l('saved_images') .":</h2>";
	echo "<p>" .$filelist. "</p>";
}}}
Je n'arrive pas à réparer ce problème en utilisant umask, j'ai tout essayé, c'est peut-être absurde. J'ai cherché partout avant, et aussi sur le forum de sNews mais je n'arrive pas à trouver la solution.
Si quelqu'un peut m'aider,

Merci d'avance

Eléphant du PHP | 160 Messages

05 sept. 2006, 15:56

J'oubliais, la ligne 1665 est :
 $upload_dir = s('image_folder') ."/"; 
Merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 sept. 2006, 16:11

Pourquoi faire un copy() et pas un move_uploaded_file() ?

Il y a peu de chance que le fichier uploadé soit dans le même dossier que le script. Il te manque donc à mon avis le chemin vers le dossier temporaire. Autant utiliser le move_uploaded_file() qui est fait pour ça et connait le chemin configurer sur le serveur, ce qui n'est pas nécessairement le cas du développeur :)

Eléphant du PHP | 160 Messages

05 sept. 2006, 16:16

Merci pour ton aide.

J'ai suivi les liens et j'ai vu que :
n'est pas affectée par les restrictions liées au safe mode et à l'open_basedir
Pourrais-tu m'en dire un peu plus sur la manière dont je dois m'y prendre.
Pas évident ce pb pour moi, très difficile de comprendre ce code.
Si tu peux encore m'éclairer?

Merci

Eléphant du PHP | 160 Messages

05 sept. 2006, 16:30

Merci beaucoup pour ton aide, je vais mettre la réponse sur le forum de snews. J'ai juste changé la fonction.
Toutes mes questions sont résolues sur ce forum.
Vous êtes des bons
Merci encore