[PHP] Appeler un fichier

WRInaute discret
Bonjour,

Je désespère d'avoir une nouvelle de mon hébergeur ... pour savoir si il a modifié des paramètres récemment sur ma machine. Avant, tout marché bien.

Donc, je viens vers vous pour vos avis d'expert.


J'ai un fichier qui appelle un fichier à télécharger. Il lance le téléchargement et implémente de +1 un fichier texte (compteur).

Je suis pas un pro en php, et je n'arrive pas à bidouiller ma fonction et surtout à comprendre le message d'erreur.

Voici mon fichier download.php3
Code:
<?
$tel_file = "$file".".txt";
// --------------------------------
$fp = fopen("$tel_file","r+");
$nbtel = fgets($fp,255);
$nbtel++;
fseek($fp,0);
fputs($fp,$nbtel);
fclose($fp);
// --------------------------------
header("Location: $file".".zip");  //On redirige vers le fichier à télécharger (toujours au format ZIP!)
?>


Et voici l'erreur que me retourne le serveur.
Code:
Warning: fopen(.txt) [function.fopen]: failed to open stream: No such file or directory in /home/paysage1/domains/paysage-en-herbe.com/public_html/telechargements/textures/download.php3 on line 4

Warning: fgets(): supplied argument is not a valid stream resource in /home/paysage1/domains/paysage-en-herbe.com/public_html/telechargements/textures/download.php3 on line 5

Warning: fseek(): supplied argument is not a valid stream resource in /home/paysage1/domains/paysage-en-herbe.com/public_html/telechargements/textures/download.php3 on line 7

Warning: fputs(): supplied argument is not a valid stream resource in /home/paysage1/domains/paysage-en-herbe.com/public_html/telechargements/textures/download.php3 on line 8

Warning: fclose(): supplied argument is not a valid stream resource in /home/paysage1/domains/paysage-en-herbe.com/public_html/telechargements/textures/download.php3 on line 9

Warning: Cannot modify header information - headers already sent by (output started at /home/paysage1/domains/paysage-en-herbe.com/public_html/telechargements/textures/download.php3:4) in /home/paysage1/domains/paysage-en-herbe.com/public_html/telechargements/textures/download.php3 on line 11


Le fichier texte est belle et bien présent sur le serveur.

Merci d'avance pour votre aide.
 
WRInaute accro
>> No such file or directory

probleme de répertoire à priori. dans quel repertoire est download.php et dans quel repertoire est le txt ?
 
WRInaute impliqué
Comment est initialisé la valeur $tel ?

peux tu faire un

echo $tel;
echo ";".$tel_file;

au début de ton script pour afficher la valeur de ces 2 variables

car à mon sens, ici la valeur $tel n'est pas initialisé...
c'est une valeur que tu récupères via l'url via un formulaire ?
 
WRInaute discret
bozoleclown a dit:
Comment est initialisé la valeur $tel ?
c'est une valeur que tu récupères via l'url via un formulaire ?
Oui, la valeur est via mon URL.
Exemple : *http://...../download.php3?file=nom-du-fichier

e-kiwi a dit:
Warning: fopen(.txt)
ton fichier n'a pas de nom
Ben si.
Dans le fichier php, j'ai : $tel_file = "$file".".txt";
Non ? c'est pas ca le nom du fichier. Il le récupère via l'URL.

Le nom du fichier à télécharger et le nom du fichier texte doivent porter le même nom.
 
WRInaute accro
ah, ton hébergeur a fait une modif oui, il a sécurisé ton serveur :) tu ne peux plus appeler une variable par $sonnom si c est une variable get, post, cookoie, ou session maintenant, tu dois utiliser les bonnes variables.
 
WRInaute accro
bozoleclown a dit:
remplace $file par $_GET[file]

Et teste-le au préalable, ce sera déjà plus propre.

Code:
if (isset($_GET['file']))
{
    $file = $_GET['file'];
    //ici ton code qui nécessite  d'avoir un fichier en paramètre
}
 
WRInaute discret
UsagiYojimbo a dit:
Et teste-le au préalable, ce sera déjà plus propre.

Code:
if (isset($_GET['file']))
{
    $file = $_GET['file'];
    //ici ton code qui nécessite  d'avoir un fichier en paramètre
}

roooo ... ca marche !!!!

T'es un chef UsagiYojimbo

Mon code est devenu

Code:
<?
if (isset($_GET['file']))
{
    $file = $_GET['file'];
}
$tel_file = "$file".".txt";
// --------------------------------
$fp = fopen("$tel_file","r+");
$nbtel = fgets($fp,255);
$nbtel++;
fseek($fp,0);
fputs($fp,$nbtel);
fclose($fp);
// --------------------------------
header("Location: $file".".zip");  //On redirige vers le fichier à télécharger (toujours au format ZIP!)
?>

e-kiwi a dit:
ah, ton hébergeur a fait une modif oui, il a sécurisé ton serveur Smile tu ne peux plus appeler une variable par $sonnom si c est une variable get, post, cookoie, ou session maintenant, tu dois utiliser les bonnes variables
Et effectivement toi aussi tu as raison.
C'est la source du probleme ... avant le server était en registerGlobal ON
Et forcement pour plus sécurité il on mis en off.

Vous êtes tous des chefs ... merci de votre aide et de votre dévouement à tous les 3.
 
WRInaute impliqué
En fait dans ton code, le if ne sert à rien
car s'il manque le paramètre dans l'url, le code va planter comme avant

donc soit tu enlèves le if comme tu avais avant (le $_GET en plus)
soit tu fais comme ça pour être encore plus propre


Code:
<?
if (isset($_GET['file']))
{
    $file = $_GET['file'];
    $tel_file = "$file".".txt";
    // --------------------------------
    $fp = fopen("$tel_file","r+");
    $nbtel = fgets($fp,255);
    $nbtel++;
    fseek($fp,0);
    fputs($fp,$nbtel); 
    fclose($fp);
    // --------------------------------
    header("Location: $file".".zip");  //On redirige vers le fichier à télécharger (toujours au format ZIP!)
}
else{
    echo "il manque le paramètre file";
}
?>
 
WRInaute discret
Oui effectivement, si je met pas de ELSE, mon IF sert a rien. Comme ca si y a un bug, je peux gérer un message d'erreur.

Tout fonctionne nickel.

Merci encore.
 
WRInaute discret
Bonjour,

Je dépoussière un peu mon topic puisque une fois de plus mon hébergeur m'a changé de machine et que je n'ai aucune réponse de sa part sur les changements qu'il aurait pu faire sur celle-ci.

Mon script précédemment cité et que je recopie ci-dessous, ne fonctionne à nouveau plus.
Lorsque je clique sur le lien pour lancer le téléchargement le fichier, il m'affiche le contenu de mon fichier PHP. Le téléchargement n'est donc pas lancé.

Code:
<?
if (isset($_GET['file']))
{
    $file = $_GET['file'];
    $tel_file = "$file".".txt";
    $fp = fopen("$tel_file","r+");
    $nbtel = fgets($fp,255);
    $nbtel++;
    fseek($fp,0);
    fputs($fp,$nbtel);
    fclose($fp);
    header("Location: $file".".zip");
}
else{
    echo "Desole, une erreur est survenue. Merci de nous contacter pour nous informer de ce probleme, que nous corrigerons dans les meilleurs delais.";
}
?>

Avez vous une solution ?
Merci d'avance.
 
WRInaute impliqué
quelle est l'extension du fichier ?

toujours download.php3 ?

peut-etre que ton hébergeur ne supporte plus les extensions .php3 ?
du coup essaie de passer en .php
 
WRInaute discret
bozoleclown a dit:
peut-etre que ton hébergeur ne supporte plus les extensions .php3 ?
du coup essaie de passer en .php

lol ... c'est ca.
Je suis tout honteux de ne pas y avoir pensé.

Merci beaucoup.
 
Discussions similaires
Haut