Erreur fopen

[Résolu]
Signaler
Messages postés
66
Date d'inscription
lundi 12 mars 2007
Statut
Membre
Dernière intervention
5 mai 2009
-
Messages postés
66
Date d'inscription
lundi 12 mars 2007
Statut
Membre
Dernière intervention
5 mai 2009
-
Bonjour,
J'héberge un serveur sur mon ordinateur (avec WAMP5).

Voici un bout de script :


<hr />

$lenomdutxt = "C:\\nightshadowfiles\\download\\hosted\\$outype\";
$handle = "$destination_file.txt";
// Assurons nous que le fichier est accessible en écriture
if (is_writable($lenomdutxt)) {    // Dans notre exemple, nous ouvrons le fichier $lenomdutxt en mode d'ajout
    // Le pointeur de fichier est placé à la fin du fichier
    // c'est là que $somecontent sera placé
    if (!$handle = fopen($lenomdutxt, 'a')) {
         echo "Impossible d'ouvrir le fichier ($lenomdutxt)";
         exit;
    }

    // Ecrivons quelque chose dans notre fichier.
    if (fwrite($handle, $somecontent) === FALSE) {
       echo "Impossible d'écrire dans le fichier ($lenomdutxt)";
       exit;
    }
   
    echo "L'écriture de ($somecontent) dans le fichier ($lenomdutxt) a réussi";
   
    fclose($handle);

<hr />
Mais quand je vais sur la page j'ai cette erreur :
Warning : fopen(C:\nightshadowfiles\download\hosted\other\) [function.fopen]: failed to open stream: Permission denied in C:\nightshadowfiles\download\uploader.php on line 95
Impossible d'ouvrir le fichier (hosted\other\)

Variables :
$outype = un nom de fichier (défini plus heau).
$destination_file = un nom encodée (défini plus heau [exemple de nom: 1177875959questions.png.txt]).
$somecontent = Du texte (url) que je veut écrire dans le fichier txt (défini plus heau).

         Merci d'avance pour votre aide.

8 réponses

Messages postés
66
Date d'inscription
lundi 12 mars 2007
Statut
Membre
Dernière intervention
5 mai 2009

Alors j'ai trouvé mon problème, je vais publier le script sur le site dans 8 heures.
Messages postés
66
Date d'inscription
lundi 12 mars 2007
Statut
Membre
Dernière intervention
5 mai 2009

Je ne peut pas (ou je ne sais pas comment) éditer mon message alors je m'excuse pour le double poste.

En réalité ce que je veut faire avec le script php c'est créer un fichier .txt avec le nom: $destination_file
Dans le répétoire de mon serveur : C:\nightshadowfiles\download\hosted\$outype
Puis écrire une url dans le fichier texte. L'url dois être le chemin d'accès du fichier.
Messages postés
354
Date d'inscription
dimanche 3 juin 2001
Statut
Membre
Dernière intervention
11 mars 2013

C'est normal (et heureusement) que tu ne puisse pas écrire n'importe où sur ta machine. Sinon tu imagines la tête des hébergeurs qui veraient leurs ficheirs de configuretion réécrits par des petits malins... Bonjour les dégats!!!
Messages postés
66
Date d'inscription
lundi 12 mars 2007
Statut
Membre
Dernière intervention
5 mai 2009

Mais y à t'il une façon que je puisse y écrire? (C:\nightshadowfiles\ est mon fichier www)
Messages postés
192
Date d'inscription
lundi 24 décembre 2001
Statut
Membre
Dernière intervention
3 février 2010

Il y a surment moyen, mais il va faloir enlever des protections...
sinon, écrit le dans un dossier specifique dans ton site (protège le par un htaccess pour ton serveur uniquement pour ne pas avoir de personnes qui vienne farfouiller la dedans), puis execute un fichier .cmd avec la fonction exec, ou il y aura une commande dans le genre :
copy .\*.png.txt C:\nightshadowfiles\
del .\*.png.txt
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
18
Salut,

Quelle est l'utilité de cette ligne ?

$handle = "$destination_file.txt";

Puisque $handle est écrasé 2 lignes plus loin par :

if (!$handle = fopen($lenomdutxt, 'a')) {

Sinon, pour moi, ça :
$lenomdutxt = "C:\\nightshadowfiles\\download\\hosted\\$outype\";
c'est un chemin de répertoire, pas de fichier. Si c'est un fichier, il ne faut pas mettre de séparateur en fin de chaîne ( \ sur Win, / sur Linux )
Messages postés
66
Date d'inscription
lundi 12 mars 2007
Statut
Membre
Dernière intervention
5 mai 2009

Alors j'ai réusi en me basant sur plusieurs scripts.
Mais il y à toujours une erreur.

J'explique la première partie du script doit récupérer des donées sur un serveur shoutcast puis les mettres dans une variable
$song = le nom de la chanson
Puis quand la chanson est prise il crée un fichier txt avec le nom de la chanson. Exemple :
Chanson 1 - Artiste Bien.txt
Chanson 1 - Artiste Mal.txt

Mais il ne le fais pas il fais ceci :
.txt (il ne met pas de nom)

Pouvez-vous corriger mon script svp ?

<?php


// simple.php - shoutcast 7.html information display utility
// version 0.1.5


// To use this script, save this page save simple.php then edit the information below as noted, uncomment what you need
// To imbed the information on your php site use the include function on the page you wish to display the information




// Edit the next two lines with your server information
$host = "masterofquebec.ath.cx";
$port = "8000";


// Connect to server
[mailto:$fp=@fsockopen($host,$port,&$errno,&$errstr,10 $fp=@fsockopen($host,$port,&$errno,&$errstr,10]);
 if (!$fp) {
    echo "Erreur";
  } else {


// Get data from server
 fputs($fp,"GET /7 HTTP/1.1\nUser-Agent:Mozilla\n\n");


// exit if connection broken
for($i=0; $i<1; $i++) {
if(feof($fp)) break;
$fp_data=fread($fp,31337);
usleep(500000);
 }


// Strip useless junk from source data
$fp_data=ereg_replace("^.*","",$fp_data);
$fp_data=ereg_replace(".*","",$fp_data);


// Place values from source into variable names
list($current,$status,$peak,$max,$reported,$bit,$song) = explode(",", $fp_data, 7);


$trackpattern = "/^[0-9][0-9] /";
$trackreplace = "";
$song = preg_replace($trackpattern, $trackreplace, $song);


if ($status == "1") {
// To use any of the outputs below just uncomment (remove the double forward slashes) that line.
// Below is an example of all data available in the 7.html file made by the Shoutcast server
// **ON BY DEFAULT - COMMENT OUT (put to forwards slashes in front of it) TO HIDE


// echo "<html>\n<head>\n<title></title>\n</head>\n\nCurrent Listeners: $current
\nServer Status: $status
\nListener Peak: $peak
\nMaximum Listener: $max
\nReported Listeners: $reported
\nBroadcast Bitrate: $bit
\nCurrent Song: $song\n\n</html>";
// Below is a basic one line value of the current song, perfect for front pages of sites


    } else {
 } }


 


 


// the questions and the answers
$pool_question="Do you like copy and paste scripts?";
$pool_option[1]="Yes";
$pool_option[2]="No";


// If counter files are not available,they will be created
// You may remove next lines after the first use of the script
        if (!file_exists("$songg.txt")){
                // next two lines will not work if writing permissions are not available
                // you may create the files bellow manualy with "0" as their unique content
                file_put_contents ("$songg.txt",0);
                file_put_contents ("$songb.txt",0);
        }


// retrieve data saved in files
        $pool_responses[1]=file_get_contents("$songg.txt");
        $pool_responses[2]=file_get_contents("$songb.txt");




// if user votes, increase corresponding value
        if ($_POST["7680777"] and $_POST["7680777b"]==""){
                if ($_POST["7680777"]==1) {$pool_responses[1]++;file_put_contents("$songg.txt",$pool_responses[1]);}
                if ($_POST["7680777"]==2) {$pool_responses[2]++;file_put_contents("$songb.txt",$pool_responses[2]);}
        }


// get percentajes for each answer in the pool
        // get total number of answers
        $total_responses=$pool_responses[1]+$pool_responses[2];
        if ($total_responses==0){$total_responses=1;}  // to avoid errors at start
        // compute percentajes (with one decimal number)
        $pool_percentaje[1] = round((100*$pool_responses[1])/$total_responses,1);
        $pool_percentaje[2] = round((100*$pool_responses[2])/$total_responses,1);
                                                               
// print the form, which includes de answers and the percentajes
print "<center>\n";
print "<form method=post action=".$_SERVER["PHP_SELF"].">\n";
print "".$pool_question."\n";
print "\n\";
// answer 1
print \"----
\n\";
print \"  ".$pool_option[1].", \n\";
print \"".$pool_responses[1]." (".$pool_percentaje[1]."%), \n\";
print \"\n\";
// answer 2
print \"----
\n\";
print \"  ".$pool_option[2].", \n\";
print \"".$pool_responses[2]." (".$pool_percentaje[2]."%), \n\";
print \"\n\";
print "
\n";
// a simple control to avoid one user to vote several times
if ($_POST["7680777"]){
        print "\n";
}
print "\n";
print "</form>\n";
print "</center>\n";


?>
Messages postés
66
Date d'inscription
lundi 12 mars 2007
Statut
Membre
Dernière intervention
5 mai 2009

Alors j'ai trouvé mon problème, je vais publier le script sur le site dans 8 heures.