Page 1 sur 1

Rechercher un fichier sur 3 serveurs

Posté : 01 oct. 2013, 09:09
par rimie
Bonjour,

Je cherche un fichier mp3 sur 3 serveurs avec fopen, quand il le trouve par exemple sur serveur 2, il affiche trouve et affiche aussi trouve sur serveur 3, j'ai conlu par, si il le trouve il affiche trouve sur ce serveur et les serveurs qui suivent:
<?php

$file = 'site.com/medias/'.$cat.'/'.$scat.'/MP3/'.$domainSite.'_'.$cat.'_'.$scat.'_';

for($i=1; $i<=3; $i++){
    
    $num_pad = str_pad($num, 3, 0, STR_PAD_LEFT);
    
    if($i == 1){
        $path = 'www.'.$file.'00'.$i.'.mp3';
    } else {
        $path = 'http://server'.$i.'.'.$file.$num_pad.'.mp3';
    }
    
    echo $path.'<br />';
    
    
    $handle = fopen($path, "r");
    
    if($handle){
        echo 'Found in '.$i.'<br />';
        //exit();
        // autres actions ici
    } else {
        echo 'Not found<br>';
    }
    
}   
?>
en utilisant exit(), le script s'arrette la, alors je peux pas continuer les autres actions.

Je cherche a afficher le nom du serveur ou le fichier etait trouve correctement

Merci a vous

Re: Rechercher un fichier sur 3 serveurs

Posté : 01 oct. 2013, 09:24
par computarelier
Salut Rimie,

Je suis pas sûr d'avoir bien bien compris mais pourquoi ne pas mettre un break si c'est trouvé, dans ton for ?
break
(PHP 4, PHP 5)
L'instruction break permet de sortir d'une structure for, foreach, while, do-while ou switch.
break accepte un argument numérique optionnel qui vous indiquera combien de structures emboîtées doivent être interrompues.
Bon courage,
Computarelier

Re: Rechercher un fichier sur 3 serveurs

Posté : 02 oct. 2013, 02:26
par rimie
j'ai essaye break et ca marche pas

Re: Rechercher un fichier sur 3 serveurs

Posté : 02 oct. 2013, 02:41
par rimie
j'ai teste le meme code en local ca marche, sur le serveur non, quand il trouve le fichier, toutes les locations qui suivent il affiche qu'il est trouve, en ajoutant plus de serveurs, il confirme l'existence du fichier, autrement dit:

si je mets une boucle comme ca, sachant que $i et le nom du serveur
 for($i=1; $i<=3; $i++){
et que le fichier a ete trouver sur le serveur numero 2, il affiche aussi qu'il a ete trouve sur le serveur num 3

Re: Rechercher un fichier sur 3 serveurs

Posté : 02 oct. 2013, 09:58
par computarelier
Et en tournant le problème différemment, que penses tu de :

$serverunumero=1;
$fichiertrouve = false;

while $fichiertrouve ===false

// tu fais ta recherche
si tu le trouves, $fichiertrouve = $serveurnumero
sinon $serveurnumero++ (sauf si c'était déjà le serveur 3 auquel cas tu fais $serveurnumero=0)

Comme ça ton $serveurnumero prends 0 si c'est pas trouvé, 1,2,3 si c'est trouvé sur l'un de ces serveurs et ça devrait marcher...

Bonne journée,
Computarelier

Re: Rechercher un fichier sur 3 serveurs

Posté : 03 oct. 2013, 02:50
par rimie
merci computarelier, je vais essayer, je doute qu'il prenait toujours la valeur du dernier

PS: la fonction fopen avec l'option allow_url_fopen = On, est ce qu'elle a un danger sur le serveur?

Re: Rechercher un fichier sur 3 serveurs

Posté : 03 oct. 2013, 07:46
par computarelier
Y'a pas de raison... Si quelqu'un d'autre peut confirmer ? :-)

Tiens moi au courant,
Computarelier

Re: Rechercher un fichier sur 3 serveurs

Posté : 03 oct. 2013, 14:13
par Pitet
Salut,

Oui l'option allow_url_fopen = On représente un risque pour ton serveur : http://phpsec.org/projects/phpsecinfo/t ... fopen.html
La plupart des vulnérabilités d'injection de code dans les applications web PHP ont pour cause l'activation de l'option allow_url_fopen combiné à un mauvais filtrage des entrées utilisateurs.
Il ne faut donc pas oublier de bien filtrer les entrées utilisateurs ($_POST, $_GET...) si celles-ci sont utilisées dans les fonctions d'accès de fichier à distance (fopen, file_get_contents, ...)
Pour ton code, il semble que l'internaute ne puisse pas modifier la variable $path donc le risque est amoindri pour ton script. Sinon phpsec.org conseille d'utiliser les fonctions cURL pour accéder aux fichiers distants.

Bonne journée

Re: Rechercher un fichier sur 3 serveurs

Posté : 04 oct. 2013, 05:25
par rimie
Je pense utiliser cURL, c'est mieux:
function remoteFileExists($url) {
    $curl = curl_init($url);

    //don't fetch the actual page, you only want to check the connection is ok
    curl_setopt($curl, CURLOPT_NOBODY, true);

    //do request
    $result = curl_exec($curl);

    $ret = false;

    //if request did not fail
    if ($result !== false) {
        //if request was ok, check response code
        $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);  

        if ($statusCode == 200) {
            $ret = true;   
        }
    }

    curl_close($curl);

    return $ret;
}