Fichier et Mac

Par LesTutossUE4, il y a 10 ans


Bonjour,
J'ai un problème lié aux fichiers et à l'os Mac.
Dans mon code, je récupère un fichier dans un formulaire et je le met sur mon FTP. Ensuite je crée un fichier texte, j'écris dedans, puis je l'enregistre.
Voici mon code :

<?php session_start(); if(!isset($_SESSION["User"])){ header("Location: ./"); } if(!isset($_SESSION["niveau"])){ header("Location: panel.php"); } if(isset($_POST) && !empty($_POST) && isset($_POST["submit"]) && isset($_FILES['image']) && isset($_POST["reponse"])){ $uploaddir = "../images/".$_SESSION["niveau"]."/"; $uploadfile = $uploaddir . basename($_FILES['image']['name']); if(!move_uploaded_file($_FILES['image']['tmp_name'], $uploadfile)) echo 'erreur'; $path=pathinfo($uploadfile); $monfichier = fopen($uploaddir.$path["filename"].'.txt', 'a+'); fputs($monfichier,stripslashes($_POST["reponse"])); fclose($monfichier); header("Location: list.php"); } ?> <!DOCTYPE HTML> <html> <head> <link rel="stylesheet" type="text/css" href="../css/style.css"> <link rel="stylesheet" type="text/css" href="../css/zoombox.css"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <div id="content"> <h1>Ajouter une question...</h1> <br /> <div class="imageadeviner"> <form action="" method="post" enctype="multipart/form-data"> <input type="file" name="image" accept="image/*" /> <br /><br /> <label for="reponse">La réponse:</label> <input type="text" name="reponse" id="reponse" /> <div class="action"> <input type="submit" name="submit" value="+ Ajouter" /> </div> </form> <a class="button" href="list.php">Retour &#x21ba;</a> </div> </div> </body> </html>

Tout ce code fonctionne lorsque je le fais depuis mon Windows. Mais mon client ne possède qu'un mac. Je précise que le problème ne vient pas de safari puisque avec firefox non plus cela ne fonctionne pas.
Si vous pouvez me dire quoi faire, je vous serez très reconnaissant.

Merci d'avance.

10 réponses

Lartak, il y a 10 ans

Bonjour.
Pour commencer, les séparateurs de dossiers (directory separator) ne sont pas les mêmes entre Windows et les autres OS.
Pour faire simple, sur Windows c'est le slash : /, alors que sur les autres c'est l'anti-slash : \.
Donc, je te conseille de créer une constante et de l'utiliser à la place de mettre le slash, par exemple dans un fichier de ton site qui est incluse à chaque fois, comme un fichier de constante ou de fonction :

define('DS', DIRECTORY_SEPARATOR);

Ensuite, dans ton code, par exemple :

$uploaddir = '..' . DS . 'images' . DS . $_SESSION["niveau"] . DS;

Ensuite, vérifies si ce n'est pas un problème de droit d'écriture et si c'est le cas, il te faut modifier le chmod à la création du fichier.

LesTutossUE4, il y a 10 ans

Il suffit simplement de faire ça ? :

if(isset($_POST) && !empty($_POST) && isset($_POST["submit"]) && isset($_FILES['image']) && isset($_POST["reponse"])){ $uploaddir = "..".DS."images".DS.$_SESSION["niveau"].DS; $uploadfile = $uploaddir . basename($_FILES['image']['name']); if(!move_uploaded_file($_FILES['image']['tmp_name'], $uploadfile)) echo 'erreur'; $path=pathinfo($uploadfile); $monfichier = fopen($uploaddir.$path["filename"].'.txt', 'a+'); fputs($monfichier,stripslashes($_POST["reponse"])); fclose($monfichier); header("Location: list.php"); }

Si c'est ça je ne comprend pas car ça se passe sur le serveur et non sur l'ordinateur de l'utilisateur...

Lartak, il y a 10 ans

Si c'est ça je ne comprend pas car ça se passe sur le serveur et non sur l'ordinateur de l'utilisateur...

Quel est le rapport avec ça alors ? :

Tout ce code fonctionne lorsque je le fais depuis mon Windows. Mais mon client ne possède qu'un mac.

Huggy, il y a 10 ans

Es-tu sûr que ton client ne dépasse pas la taille limite du serveur ?
as-tu vérifié post_max_size et max_file_uploads dans ton php.ini ?

LesTutossUE4, il y a 10 ans

Non, mais ce n'est pas le problème, je l'ai tester moi même sur un mac avec une image d'à peine 1mo et rien ne marche.
Je n'ai pas tester avec les DIRECTORY_SEPARATOR mais j'attend qu'on me dise si c'est bien ça avant de redemander à un ami de me pretter son mac.

LesTutossUE4, il y a 10 ans

Quel est le rapport avec ça alors ? :
Bah le rapport c'est que sur windows l'envoi fonctionne, alors que sur mac, non.

LesTutossUE4, il y a 10 ans

C'est bien l'histoire avec le / et le \. Merci Lartak.

Huggy, il y a 10 ans

Bizarre ton problème !!!
sous mac comme sous Linux c'est bien '/' mais sous windows le '/' marche aussi
ça m'intéresse de savoir comment tu as résolu ton problème et pourquoi tu envoies des chemins sur le réseau.

LesTutossUE4, il y a 10 ans

J'ai remplacé uniquement la ligne

$uploaddir = "../images/".$_SESSION["niveau"]."/";

par

$uploaddir = "..".DS."images".DS.$_SESSION["niveau"].DS;

Avec la ligne suivante au tout début évidemment :

define('DS', DIRECTORY_SEPARATOR);
Lartak, il y a 10 ans

De rien.
Ravi d'avoir pu t'aider à solutionner ton problème.