GNT sans publicité, site mobile, fonctionnalitées exclusives...

putenv() interdit pour raisons de securite

Le
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
Lire les 2 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
P'tit Marcel
Le #95001
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/

DrPiquouze
Le #93839
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

Publicité
Suivre les réponses
Poster une réponse
Anonyme