OVH Cloud OVH Cloud

putenv() interdit pour raisons de securite

2 réponses
Avatar
DrPiquouze
Salut à tous,

Mon hébergeur (levillage.org) vient d'interdire sans prévenir
l'utilisation de putenv(), pour raisons de sécurité.
C'est peut-être légitime, mais il se trouve que j'utilise une
application qui elle-même utilise les packages PEAR pour les calculs
de date et de décallage horaire en fonction du fuseau horaire et de
l'heure d'été.

Est-ce qu'il y a une possibilité de contourner cette interdiction ?

Le code incriminé est dans pear/Date/TimeZone.php, ligne 236 et suiv.
:

/**
* Is the given date/time in DST for this time zone
*
* Attempts to determine if a given Date object represents a
date/time
* that is in DST for this time zone. WARNINGS: this basically
attempts to
* "trick" the system into telling us if we're in DST for a given
time zone.
* This uses putenv() which may not work in safe mode, and relies
on unix time
* which is only valid for dates from 1970 to ~2038. This relies
on the
* underlying OS calls, so it may not work on Windows or on a
system where
* zoneinfo is not installed or configured properly.
*
* @access public
* @param object Date $date the date/time to test
* @return boolean true if this date is in DST for this time zone
*/
function inDaylightTime($date)
{
$env_tz = "";
if(getenv("TZ")) {
$env_tz = getenv("TZ");
}
putenv("TZ=".$this->id);
$ltime = localtime($date->getTime(), true);
putenv("TZ=".$env_tz);
return $ltime['tm_isdst'];
}

Merci d'avance aux trapus du php !

Cordialement

2 réponses

Avatar
P'tit Marcel
Hello,

Mon hébergeur (levillage.org) vient d'interdire sans prévenir
l'utilisation de putenv(), pour raisons de sécurité.
C'est peut-être légitime, mais il se trouve que j'utilise une
application qui elle-même utilise les packages PEAR pour les calculs
de date et de décallage horaire en fonction du fuseau horaire et de
l'heure d'été.
Est-ce qu'il y a une possibilité de contourner cette interdiction ?


Tu devrais t'en sortir simplement comme cela :

function inDaylightTime($date)
{
return -date('I', $date); # I donne -1 si heure d'été, 0 sinon
}


si cela ne marche pas et si le serveur est dans l'Union Européenne, il y
a la solution bourrin :

function inDaylightTime($date)
{
$mois = date('n', $date);
if(($mois < 3) or ($mois > 10)) return 0; # heure d'hiver
if(($mois > 3) and ($mois < 10)) return 1; # heure d'été
$jour = date('j', $date);
$heure = date('H', $date);
$annee = date('Y', $date);
# calculons le dernier dimanche du mois (date bascule été/hiver)
$bascule = mktime(0,0,0, $mois, 31, $annee);
for($jb1; date("w", $bascule)!=0; $jb--) {
$bascule = mktime(0,0,0, $mois, $jb, $annee);
}
if($mois==3) {
if (($jour < $jb) or (($jour == $jb) and ($heure < 2)))
return 0; # heure d'hiver
else return 1; # heure d'été
}
if($mois=) {
if (($jour < $jb) or (($jour == $jb) and ($heure < 2)))
return 1; # heure d'été
elseif(($jour == $jb) and ($heure == 2)))
return -1; # impossible de conclure
else return 0; # heure d'hiver
}
# en principe le programme ne devrait pas arriver ici !
return -1; # impossible de conclure
}



eça
--
P'tit MÃrcel
stats sur les forums modérés http://www.centrale-lyon.org/ng/

Avatar
DrPiquouze
P'tit Marcel wrote:
Hello,

Tu devrais t'en sortir simplement comme cela :

function inDaylightTime($date)
{
return -date('I', $date); # I donne -1 si heure d'été, 0 sinon
}


Salut P'tit Marcel, et merci de t'être penché sur mon problème.
J'essaie ça dès que j'ai un moment et je te tiens au courant.

Cordialement