source: extensions/Mail_supervisor/include/fonctions.php @ 9702

Last change on this file since 9702 was 9702, checked in by cljosse, 13 years ago

[Mail supervisor] add class.

File size: 21.8 KB
Line 
1<?php
2// +-----------------------------------------------------------------------+
3// | Piwigo - a PHP based picture gallery                                  |
4// +-----------------------------------------------------------------------+
5// | Copyright(C) 2008-2009 Piwigo Team                  http://piwigo.org |
6// | Copyright(C) 2003-2008 PhpWebGallery Team    http://phpwebgallery.net |
7// | Copyright(C) 2002-2003 Pierrick LE GALL   http://le-gall.net/pierrick |
8// +-----------------------------------------------------------------------+
9// | This program is free software; you can redistribute it and/or modify  |
10// | it under the terms of the GNU General Public License as published by  |
11// | the Free Software Foundation                                          |
12// |                                                                       |
13// | This program is distributed in the hope that it will be useful, but   |
14// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
15// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
16// | General Public License for more details.                              |
17// |                                                                       |
18// | You should have received a copy of the GNU General Public License     |
19// | along with this program; if not, write to the Free Software           |
20// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
21// | USA.                                                                  |
22// +-----------------------------------------------------------------------+
23
24if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
25if (!defined('MAIL_SUPERV_PATH')) define('MAIL_SUPERV_PATH' , PHPWG_PLUGINS_PATH.basename(dirname(__FILE__)).'/');
26
27global  $superv_champs , $superv_type ,$superv_bl_champs , $superv_bl_type ; 
28// if (!isset($_COOKIE[session_name()])){}
29
30global $lang ;
31global $template ;
32//===============================================
33function corrige_header($Carbonne,$headers,$args,$cl_list_mail)
34        {
35        global $mails_options,$conf_mail,$mailto,$infos_message;
36
37 if (!empty($args[$Carbonne]))
38         {
39                if ( count($args[$Carbonne]) > 0 ) 
40                {
41                        if ($mails_options['check_header_carbon'] == 'on') {
42                                        $cl_list_mail  =  str_replace(","," , ",get_strict_email_list(implode(',', $args[$Carbonne])))." \n"  ;
43                                        $headers = preg_replace('/.*'.$Carbonne.'(.*).\n/i', $Carbonne.': '.$cl_list_mail, $headers);
44                                }
45                }
46       
47        } else {
48             // Raz Bcc, Cc dans headers
49                        $headers = preg_replace('/.*'.$Carbonne.'(.*).\n/i', "" , $headers);
50        }
51               
52                $headers  = str_replace("\n.", "\n..",$headers );
53        $ret->headers = $headers ;
54        $ret->list_mail = $cl_list_mail ;
55        return $ret;
56
57               
58        }
59       
60function int_to_heure($int)
61{
62global $lang,$mails_donnees ;
63
64$v0=Date_to_numeric(l10n('Day') );
65
66
67
68        $delta=(7*24*60*60) ;
69        $week = (int) ($int/$delta); 
70        $int= $int-($week*$delta) ; 
71
72        $delta=(24*60*60) ;
73        $day= (int) ($int/$delta); 
74        $int=$int-($day*$delta);
75
76        $delta=(60*60) ;
77        $heures=(int) ($int/$delta);
78        $int=$int-($heures*$delta);
79
80        $delta=(60) ;
81        $minutes=(int) ($int/$delta);
82        $int= $int - ($minutes*$delta);
83
84        $secondes=(int) ($int);
85        $day      = substr ('00'.    $day,-2,2);   
86        $heures   = substr ('00'. $heures,-2,2);   
87        $minutes  = substr ('00'.$minutes,-2,2);
88        $secondes = substr ('00'.$secondes,-2,2);
89       
90$retour="";
91$Week=explode(" ",l10n('Week %d'));
92$Week= ($Week[0]);
93
94if ($week > 0 ) $retour .= "+" . $week ." " . $Week ;
95if ($day  > 0) $retour .= "+" . $day ." " .l10n('Day');
96if ($heures > 0) $retour .= "+" . $heures." " .l10n('Hour');
97if ($minutes > 0) $retour .= "+" . $minutes." " .l10n('Minute');
98if ($secondes > 0) $retour .= "+" . $secondes." " .l10n('Second');
99$retour=str_replace("+0","+",$retour);
100//================================================================================================   
101return $retour;
102}         
103
104       
105function verif_base(){
106  global $lang,$superv_champs,$superv_type,$superv_bl_champs,$superv_bl_type;
107  load_language('plugin.lang', MAIL_SUPERV_PATH);
108  //==============================================================================             
109  create_table(MAIL_BLACK_LISTE_TABLE,$superv_bl_champs,$superv_bl_type) ;
110  ajust_table(MAIL_BLACK_LISTE_TABLE,$superv_bl_champs,$superv_bl_type)  ; 
111  //==============================================================================             
112  create_table(mail_superv_TABLE,$superv_champs,$superv_type) ;
113  ajust_table(mail_superv_TABLE,$superv_champs,$superv_type)  ;
114  //==============================================================================             
115    $valeurs= array (   1,
116                                                          0,
117                                   time(),
118                         2000,
119                  '"604800"' ,
120                            0,
121                       time(),
122                           10,
123                   '"172800"',
124                    '"false"',
125                       time(),
126                   '"172800"',
127                     '"Init"',
128   '"'.l10n('Sv_supervisor').'"',
129        '"'.l10n('hello').'"',
130         );
131        ajout_ligne(mail_superv_TABLE,$superv_champs, $valeurs,false ) ;
132}
133//=================================================================================
134
135
136//=========================================
137function Get_colonnes_de($table)
138{
139    $query = 'DESC '.$table.';';
140    $result = mysql_query($query);
141    $columns_of= array();
142    while ($row = mysql_fetch_row($result))
143    {
144      array_push($columns_of, $row[0]);
145    }
146 
147  return $columns_of;
148}
149
150function get_liste($group_id)
151{
152global $conf ;
153  $query = '
154SELECT DISTINCT u.'.$conf['user_fields']['id'].' AS id,
155                u.'.$conf['user_fields']['username'].' AS username,
156                u.'.$conf['user_fields']['email'].' AS email,
157                ui.status,
158                ui.enabled_high,
159                ui.level
160  FROM '.USERS_TABLE.' AS u
161    INNER JOIN '.USER_INFOS_TABLE.' AS ui
162      ON u.'.$conf['user_fields']['id'].' = ui.user_id
163    LEFT JOIN '.USER_GROUP_TABLE.' AS ug
164      ON u.'.$conf['user_fields']['id'].' = ug.user_id
165  WHERE ug.group_id='.$group_id.' '; 
166 $groups=array();
167  $datas = pwg_query($query); 
168 
169  if (!empty($datas)) {
170    while ($group = mysql_fetch_array($datas,MYSQL_ASSOC))
171    {   
172      if (!empty($group['email']))
173      {         array_push($groups, format_email($group['username'], $group['email'] ));
174      }
175    }
176  } 
177  return $groups ;
178 
179}
180//=================================================================================
181
182function create_table($nom_table,$champs,$types)  //mail_superv_TABLE
183{
184        $i=0;
185        $valeurs=array();
186  foreach ( $champs as $champ) {
187      $champ = trim($champ);
188      array_push($valeurs , " `".$champ."`" . '  ' . $types[ $i] )  ;
189      $i +=1;
190    }
191
192
193       
194        if ( count($valeurs) == 0) return ;
195
196    $valeurs=implode(", ",$valeurs) ;
197        //===============================================================================
198                $query = "CREATE TABLE IF NOT EXISTS  `" . $nom_table . "` (". $valeurs . " , PRIMARY KEY  (`id` ) ) ENGINE=MyISAM  ;";   
199                         if ( pwg_query($query) ) return ; 
200                                die("ERREUR CREATION ".$query);         
201     
202         
203}
204function ajust_table($nom_table,$champs,$types)  //mail_superv_TABLE
205{
206global $infos_message ;
207$colonnes = Get_colonnes_de($nom_table);
208        $data =         $types ;
209        $i=0;
210        $valeurs=array();
211foreach ( $champs as $champ)
212   {
213     $champ = trim($champ);
214          if (!in_array( $champ,$colonnes)) {
215         array_push($valeurs , " ADD `".$champ."`" . '  ' . $data[  $i] )  ;
216         }
217         $i +=1;
218         
219    }
220//=============================================================================
221        if ( count($valeurs) == 0) return ;
222       
223  $infos_message .=  "AJUSTE TABLE : ". $nom_table . "<br />" . "NB (col) : ". count($colonnes) . mail_supervisor::Memo_Var($valeurs) . "<br />" ;
224       
225     $valeurs=implode(", ",$valeurs) ;
226        //===============================================================================
227                $query = "ALTER TABLE `" . $nom_table . "` ". $valeurs ;
228                        if (   pwg_query($query)) return ;           
229                die($query);
230}
231//==============================================================================       
232function ajout_ligne($nom_table,$champs,$valeurs,$force)
233{
234  if (!$force) {
235     $query = "
236                SELECT `id` , COUNT(`id`) as total
237                FROM `".$nom_table."` GROUP by  `id`
238                ;";     
239          list($count) = mysql_fetch_row(pwg_query($query));
240
241               
242}else{
243
244        $count = 0 ;
245}
246 
247  if ($count == 0)
248  {
249      $n_champs=implode(",",$champs);
250      $n_valeurs=implode(",",$valeurs);
251           $query = "
252        INSERT INTO `".$nom_table."` (". $n_champs.")
253        VALUES ( ".     $n_valeurs .")";
254               
255                if (pwg_query($query)) return ;
256                die($query);
257               
258  }
259}
260//=====================================================================
261function verif_mails_donnees()
262{
263global $mails_donnees,$infos_message,$erreur_message,$page;
264
265if (!is_numeric($mails_donnees['nb_mails_periode'])){
266  $periode = Str_To_Time( $mails_donnees['nb_mails_periode'],0);
267  $mails_donnees['nb_mails_periode']= ($periode > 0) ? $periode : '604800' ;
268 }
269if (!is_numeric($mails_donnees['nb_spams_periode'])){
270  $periode=Str_To_Time( $mails_donnees['nb_spams_periode'],0);
271  $mails_donnees['nb_spams_periode']= ($periode > 0) ? $periode : '172800' ; ;
272 }
273if (!is_numeric($mails_donnees['quarantaine_periode'])){
274  $periode=Str_To_Time( $mails_donnees['quarantaine_periode'],0);
275  $mails_donnees['quarantaine_periode']= ($periode > 0) ? $periode : '172800' ; 
276 }
277    if  ($infos_message != "")  {
278        array_push($page['infos'],  $infos_message);
279        $infos_message="";
280    }           
281    if  ($erreur_message != "")  {
282        array_push($page['errors'], $erreur_message);
283        $erreur_message ="";
284    }   
285                 
286}
287//=======================================================================
288function Date_to_numeric( $Valeurs )
289{
290global $lang,$erreur_message,$infos_message;
291
292$a_ajouter = $Valeurs ;
293
294
295if (!isset($lang['Sv_second'])) {
296$Week=explode(" ",l10n('Week %d'));
297$Week= ($Week[0]);
298
299$lang['Sv_week'] = $Week;
300$lang['Sv_day'] =   l10n('Day')  ;
301$lang['Sv_hour'] =   l10n('Hour')  ;
302$lang['Sv_minute'] =   l10n('Minute') ;
303$lang['Sv_second'] =   l10n('Second');
304
305$lang['Sv_'. $lang['Sv_week']] = 'week';
306$lang['Sv_'. $lang['Sv_day']] = 'day';
307$lang['Sv_'. $lang['Sv_hour']] = 'hour';
308$lang['Sv_'. $lang['Sv_minute']] = 'minute';
309$lang['Sv_'. $lang['Sv_second']] = 'second';
310
311} 
312//--- traduction --> anglais ---
313
314 //========= suppression numeric et symbole ==========
315$new_valeur =( preg_replace("/[0-9+\-.*\/()%]/"," ",$a_ajouter)); 
316$nv =  trim( sup_double_espace($new_valeur)) ;
317 
318 
319 
320        $conv['week']= (7*24*60*60);
321        $conv['day']= (24*60*60);
322        $conv['hour']=  (60*60) ;
323        $conv['minute']=  60 ;
324        $conv['second']= 1;
325
326  $nv = explode(" ", $nv );
327 
328  foreach($nv as $nv1)
329  {
330  if (!isset($lang['Sv_'. $nv1]) ) {
331  //==== au cas pluriel ===
332 
333   $nv0 =  substr($nv1, 0,-1) ;   
334  $a_ajouter= str_replace( $nv1,$nv0,   $a_ajouter);
335  $nv1 = $nv0 ; 
336   
337  }
338 
339  if (!isset($lang['Sv_'. $nv1]) ) {
340    $erreur_message .= $nv1. " ".l10n('not_found')."<br />"; 
341        //  die($erreur_message);
342         
343  }else {
344    ob_start(); 
345         $match = $conv[strtolower($lang['Sv_'. $nv1])] ;
346         $a_ajouter = str_replace($nv1," ". $match  ." ",$a_ajouter) ;
347                 $erreur_message .= ob_get_contents();
348    ob_end_clean();
349        }       
350         
351  }
352
353$a_ajouter = "+ " .   $a_ajouter ;
354$a_ajouter=sup_double_espace($a_ajouter);
355$v1 = array('- ','+ ',' -', ' +', ' ');
356$v2 = array('-' ,'+' ,'|-', '|+', "*");
357
358$new_valeur =  str_replace($v1,$v2,$a_ajouter) ;
359$new_valeur =  str_replace('++','+',$new_valeur ) ;
360                       
361return   $new_valeur;
362}
363//=====================================================================
364function Str_To_Time( $ajout,$init_date)
365{
366//========================================================
367  global $erreur_message,$infos_message,$user;
368  global $lang;
369 
370  $ajout=ucwords ($ajout);
371 
372 
373if (is_numeric($ajout))
374 $valeur=   $ajout ;
375else
376{
377 $valeur= Date_to_numeric( $ajout) ;
378 
379 }
380 
381$new_valeur = explode( "|", $valeur );
382
383$p = $init_date ;
384$n0=0;
385$erreur = false;
386
387        //$new_valeur = $a_ajouter + $init_date ;
388        foreach($new_valeur as $nv)
389        {
390        $return = matheval($nv) ;
391                 if (strpos("error",$return)===false) {
392                    $p += $return ;
393                 }else {
394                    $erreur_message .=   "[" . $ajout . "] --> " . l10n('Sv_syntax_error') . " : " .  $nv ."<br />";
395                        $erreur = true;
396                 }
397                       
398         
399        }
400        if ($erreur) $p = -1000 ;
401return    intval($p) ;
402 
403}
404//=====================================================================================
405function matheval($equation) 
406  { 
407
408  $return="error";
409
410 
411    $equation = preg_replace("/[^0-9+\-.*\/()%]/","",$equation); 
412    $equation = preg_replace("/([+-])([0-9]{1})(%)/","*(1\$1.0\$2)",$equation); 
413    $equation = preg_replace("/([+-])([0-9]+)(%)/","*(1\$1.\$2)",$equation); 
414    $equation = preg_replace("/([0-9]+)(%)/",".\$1",$equation); 
415       
416    if ( $equation == "" ) 
417    { 
418      $return = 0; 
419    }     else  { 
420       @eval("\$return=" . $equation . ";" ); 
421    }
422 return $return; 
423   
424  } 
425
426//======================================================================================
427function sup_double_espace($chaine){
428global $erreur_message;
429        $str_temp = $chaine." ";
430        $sep=" ";
431        $chaine = trim($chaine);
432    if ($chaine=="") return ;
433        $existe = (strpos($sep.$sep,$chaine )===false) ;
434         while  ($existe ){
435         $str_temp = str_replace($sep.$sep, $sep, $chaine ); 
436                if($str_temp == $chaine ) return $chaine ;
437//                      $erreur_message .= mail_supervisor::Memo_Var($str_temp) ;
438                $chaine  = $str_temp;
439                        $existe =  (strpos($sep.$sep,$chaine )===false) ;
440                }
441        return $chaine;
442}
443//==================== TEST black_liste ============================================   
444function kill_list() {
445  global $pays,$region,$ville,$ip ;
446  global $erreur_message,$infos_message,$conf; 
447  global $conf, $user, $page;
448  global $mails_options ;
449  global $superv_bl_champs,$superv_bl_type ; 
450  global $nb ; 
451  if (!isset($ip)) {
452    if (getenv("HTTP_CLIENT_IP"))   {
453      $ip=getenv("HTTP_CLIENT_IP");
454    }else{
455      $ip=getenv("REMOTE_ADDR");
456    }
457  }
458  $champs=implode(',',$superv_bl_champs);
459   $query = "SELECT ".$champs.",COUNT(`ip`) as total
460  FROM `".MAIL_BLACK_LISTE_TABLE."`
461                WHERE '".$ip."' LIKE `ip`
462                GROUP by `ip`
463  ;";   
464        $result = @pwg_query($query);
465         if (!$result) {
466                        verif_base();
467                        $result = @pwg_query($query);
468                        }
469          $datas = mysql_fetch_array($result,MYSQL_ASSOC);
470        $nb = $datas['total']|0; 
471    //=======================================================================   
472    if ($mails_options['set_auto'] == 'on') { 
473      global $user_name,$mail_adresse;
474
475       if (isset($nb) && $nb>0) {
476       //if (test_spam($ip,$user['username'] ,$user['email']))  // ne plus tester automatiquement .
477            if ($nb==0) {
478                  $valeurs=array( 'NULL',
479                           "'".$ip."'",
480                                                "'".$pays."'",
481                                                "'".$region."'",       
482                                                "'".$ville."'",
483                                                "'".$user['email']."'",
484                                                "'".$user['username']."'",     
485                                                $nb+1
486                    );
487                  ajout_ligne(MAIL_BLACK_LISTE_TABLE,$superv_bl_champs, $valeurs,$nb==0) ;     
488                }else{ 
489            mail_supervisor::Get_geo();   
490            $nb +=1;   
491                         $query ="UPDATE " . MAIL_BLACK_LISTE_TABLE . " SET ";
492                         if (isset($_POST['pays']))     
493                         $query .= "`pays` = '". $pays ."',
494                                `region` = '" . $region ."',
495                                `ville` = '" . $ville . "',                     
496                                ";                     
497                         $query .= "`adresse` = '".$user['email']."',           
498                                `fai` = '".$user['username']."',               
499                                `nb` = " . $nb . "
500                         WHERE '".$ip."' like `ip` ";           
501                                       pwg_query($query );     
502                }
503             $erreur_message .= $pays . $ip ." <br />User Name :".$user['username']."<br />User Mail :".$user['email'] . ' -----> ' . l10n('Sv_black_liste') ;
504       // die($nb." ".$ip." ".$user['username']." ".$user['email']); 
505 
506       return true ;   
507      } 
508    }
509 //==============================================================================
510
511 if ( $mails_options['ip'] == $ip ) return ($nb > 0) ;   
512   $ip0= $mails_options['ip'] ;
513   $mails_options['ip'] = $ip ; 
514   mail_supervisor::sauve_options(); 
515        if (  $nb > 0 )
516        {
517               $query = "
518                SELECT ".$champs.",COUNT(`id`) as total
519                FROM `".MAIL_BLACK_LISTE_TABLE."`
520                    WHERE '".$ip."' = `ip`
521                        GROUP by `ip`
522                ;";     
523                 $result = @pwg_query($query);
524 
525        if (!$result) {
526                                        verif_base();
527                                        $result = @pwg_query($query);
528                                        }
529            $datas = mysql_fetch_array($result,MYSQL_ASSOC);
530                 $nb = $datas['total']; 
531                 
532            $row  = mysql_fetch_row(pwg_query($query));
533            $nb =  ($row[7]);
534        $erreur_message .= $ip0 . ' | ' .$ip . ' | ' . $pays . ' | ' . $region . ' | ' . $ville . ' ' . $nb . ' ==> '; 
535 
536         if ($nb == 0)
537                 {
538                        $valeurs=array( 'NULL',
539                            "'".$ip."'",
540                                        "'".$pays."'",
541                                        "'".$region."'",       
542                                        "'".$ville."'",
543                                        "'".$user['email']."'",         
544                          "'".$user['username']."'",           
545                                        1
546              );
547                  ajout_ligne(MAIL_BLACK_LISTE_TABLE,$superv_bl_champs, $valeurs,true) ;       
548                 
549                 } else {
550                  $nb += 1;
551         $query ="
552                        UPDATE " . MAIL_BLACK_LISTE_TABLE . "
553                        SET ";
554                if (isset($_POST['pays']))     
555                 $query .= "   
556                        `pays` = '". $pays ."',
557                        `region` = '" . $region ."',
558                        `ville` = '" . $ville . "',
559                        ";
560                 $query .= "   
561                    `adresse` = '".$user['email']."',
562                        `fai` = '".$user['username']."',                       
563                        `nb` = " . $nb . "
564                    WHERE '".$ip."' = `ip`
565                ";
566               
567                                pwg_query($query );     
568                                }
569        }
570 return ($nb > 0) ;
571}
572//=====================================================================================
573function test_spam($ip =0,$user_name ='', $mail_adresse = "")
574{
575 $buffer="";
576 global $page,$infos_message;
577 $src =  "http://www.stopforumspam.com/api?";
578 $type=array();
579 $result="";
580 $ip= sup_double_espace($ip);
581 if (strlen($ip)>3) { 
582   //==================  Verifie si l'IP est correct  ================================
583   if (clj_is_ip($ip)){     
584     
585   } else { 
586   //==================  Verifie si l'adresse mail est correcte  ================================
587         if( clj_is_mail($ip) ){ 
588                         $mail_adresse=$ip ;
589                 $ip="";
590            }
591            else
592            {
593   //==================  Login  ================
594              $user_name=$ip;
595              $ip="";
596            }
597   }   
598   //=============================================================================
599 }
600
601 $user_name=str_replace(" ","%20",trim($user_name));
602 if ($user_name==l10n('Sv_guest')) $user_name="";
603 $user_name="";  // ne plus tester sur le login.
604 $mail_adresse =str_replace(" ","%20",trim($mail_adresse));
605 if ( strlen($user_name) > 3)     $type[]="username=$user_name" ;
606 if ( strlen($mail_adresse) > 3)   $type[]="email=".$mail_adresse ;
607 if ( strlen($ip) > 3)   $type[]="ip=".$ip ; 
608 foreach  ( $type as $fil ) {   
609  $resultat="";
610  if (  clj_fetchRemote($src.$fil , $resultat,1))
611   $result .= $resultat.'<br />'  ;               
612 }
613
614 return !(strpos(  $result ,'yes' ) === false) ;
615 
616}
617//==================================================================
618function lire_fichier_distant($fichier)
619{
620 $buffer="";
621        $handle =  @fopen($fichier,"r"); 
622        if ($handle) {
623                       while (!feof($handle)) { 
624                       $buffer .= fgets($handle, 4096);
625                                  }   
626                                   fclose($handle);
627                                }
628                                 
629        return  $buffer ;
630
631}
632//================================================
633function clj_is_ip($ip)
634{
635if (preg_match("/^(((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]{1}[0-9]|[1-9])\.){1}((25[0-5]|2[0-4][0-9]|[1]{1}[0-9]{2}|[1-9]{1}[0-9]|[0-9])\.){2}((25[0-5]|2[0-4][0-9]|[1]{1}[0-9]{2}|[1-9]{1}[0-9]|[0-9]){1}))$/",$ip))    return true ;
636                 
637}
638
639function clj_is_mail($mail)
640{     
641
642 if(preg_match('/^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,5}$/' ,$mail)) return true ;     
643  if(preg_match('/#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,5}$#/' ,$mail)) return true ;   
644}         
645
646 
647function clj_fetchRemote($src, &$dest, $timeout=1, $user_agent='Piwigo', $step=0)
648{
649  // Try to retrieve data from local file?
650 // http://www.stopforumspam.com/api?ip=95.211.1.39
651
652  if ($src=="") return ;
653 
654  if (!url_is_remote($src))
655  {
656 
657    $content = @file_get_contents($src);
658    if ($content !== false)
659    {
660      is_resource($dest) ? @fwrite($dest, $content) : $dest = $content;
661      return true;
662    }
663    else
664    {
665      return false;
666    }
667  }
668 
669  // After 3 redirections, return false
670  if ($step > 3) return false;
671
672  // Initialize $dest
673  is_resource($dest) or $dest = '';
674
675  // Try curl to read remote file
676  if (function_exists('curl_init'))
677  {
678    $ch = @curl_init();
679    @curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
680    @curl_setopt($ch, CURLOPT_URL, $src);
681    @curl_setopt($ch, CURLOPT_HEADER, 1);
682    @curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
683    @curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
684    $content = @curl_exec($ch);
685    $header_length = @curl_getinfo($ch, CURLINFO_HEADER_SIZE);
686    $status = @curl_getinfo($ch, CURLINFO_HTTP_CODE);
687    @curl_close($content);
688    if ($content !== false and $status >= 200 and $status < 400)
689    {
690      if (preg_match('/Location:\s+?(.+)/', substr($content, 0, $header_length), $m))
691      {
692        return clj_fetchRemote($m[1], $dest,$timeout, $user_agent, $step+1);
693      }
694      $content = substr($content, $header_length);
695      is_resource($dest) ? @fwrite($dest, $content) : $dest = $content;
696      return true;
697    }
698  }
699
700  // Try file_get_contents to read remote file
701  if (ini_get('allow_url_fopen'))
702  {
703
704    $opts['http'] = array('timeout' => $timeout);
705    $ctx = stream_context_create($opts);
706    $content = @file_get_contents($src, 0, $ctx);
707    if ($content !== false)
708    {
709      is_resource($dest) ? @fwrite($dest, $content) : $dest = $content;
710      return true;
711    }
712  }
713
714  return false;
715}
716
717
718?>
Note: See TracBrowser for help on using the repository browser.