php curl renvoyer un fichier au client

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : php curl renvoyer un fichier au client

Re: php curl renvoyer un fichier au client

par andykimpe » 17 août 2016, 19:42

merci Naroth mais sa na rien a voir le problème j'arrive a télécharger le fichier sans problème avec phpproxy

mais sa fait pas très propre car j’obtiens une url de type http://example.com/ledossierdephpproxy/ ... .mp4&hl=81

et le phproxy reste accessible a tous ce que je ne veux non plus

je pense tout simplement qu'il ne faut pas le faire en curl

mais en quoi ?

tout ce qu'il me faut c'est script php proxy simple qui permet de télécharger des fichier comme mp4 avi exe rar ect

mais avec le le-quelle les clients ne puisse pas entrez d'url manuellement.

et qui ne renvoie pas de paramètre get

qui prend en charge les cookies

tout sa en un seul fichier qui soit le plus simple possible

Re: php curl renvoyer un fichier au client

par Naroth » 17 août 2016, 17:41

avec un vardump après 10 minutes d'attentes j'obtient

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 133959198 bytes) in /var/www/html/test.php on line 11


lol la ligne 11 c'est


$res = curl_exec($ch);

lien de test

http://51.254.139.53/test.php

quelle qu'un aurait il la solution svp merci
Je vois pas en quoi c'est "lol" curl_exec correspond a l’exécution de la requête curl ton problème intervient pendant cette exécution.


Pour ton problème tient.
http://stackoverflow.com/questions/1226 ... -exhausted

Et au cas ou ça soit pas assez clair dans ton php.ini
memory_limit = 128M
C'est pas assez pour ton script.

php curl renvoyer un fichier au client

par andykimpe » 17 août 2016, 14:23

bonjour a tous voila donc j'ai un problème avec curl en php

j'aimerais renvoyer un fichier distant sans sauvegarder le fichier en question sur le serveur

je précise également que pour pouvoir télécharger le fichier il faut plusieurs cookies

que je ne peut pas transmettre au client pour des raison de sécurité

ce qui veut dire que je ne peux pas faire de redirection en header location

j'aimerais que ce fichier soit renvoyer par curl un peux comme un mode proxy

j’insiste également sur le faite que je ne veux en aucun cas que celui ci soit enregistrez sur le serveur

je précise également dans le code d'exemple ci dessous j'ai indiquer un fichier mp4

mais l’extension, la taille du fichier ect

dépendront de la requête qui aura était faite par le client
$url = "https://example.com/video.mp4";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:48.0) Gecko/20100101 Firefox/48.0");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch,CURLOPT_COOKIE, "cookie1=resultcookie1; cookie2=resultcookie2; cookie3=resultcookie3;");
$res = curl_exec($ch);
curl_close($ch);
echo $res;
même en renvoyant les headers au client sa ne change rien

j'ai soit une page blanche soit une page qui tourne dans le vide

je sait qu'il est tout a fait possible de faire ce type de requête mais je n'arrive pas a trouver comment


avec récupération auto des headers
$url = "https://example.com/video.mp4";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:48.0) Gecko/20100101 Firefox/48.0");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch,CURLOPT_COOKIE, "cookie1=resultcookie1; cookie2=resultcookie2; cookie3=resultcookie3;");
$res = curl_exec($ch);
curl_close($ch);
list($headers, $body) = explode("\r\n\r\n", $res, 2);
 
$headers = explode("\r\n", $headers);
$hs = array();
foreach($headers as $header)
{
    if( false !== strpos($header, ':') )
    {
        list($h, $v) = explode(':', $header);
        $hs[$h][] = $v;
    }
    else
    {
        $header1  = $header;
    }
}
list($proto, $code, $text) = explode(' ', $header1);
header($_SERVER['SERVER_PROTOCOL'] . ' ' . $code . ' ' . $text);
foreach($proxied_headers as $hname)
{
    if( isset($hs[$hname]) )
    {
        foreach( $hs[$hname] as $v )
        {
            if( $hname === 'Set-Cookie' )
            {
                header($hname.": " . $v, false);
            }
            else
            {
                header($hname.": " . $v);
            }
        }
    }
}
die($body);
mon php.ini

voir sur pastebin http://pastebin.com/B7Zmdd1a car trop de caractère



les dépandance coté serveur apache2 php5 php5-curl

avec un vardump après 10 minutes d'attentes j'obtient

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 133959198 bytes) in /var/www/html/test.php on line 11


lol la ligne 11 c'est


$res = curl_exec($ch);

lien de test

http://51.254.139.53/test.php

quelle qu'un aurait il la solution svp merci