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

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

[extensions] mail_supervisor fix bug format_email

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