9
votes

Comment vérifier si le script php est en cours d'exécution sur un serveur local?

est-il possible de vérifier si le site Web (PHP) fonctionne localement ou sur un serveur hébergé? Je souhaite activer certains journaux si le site Web fonctionne localement et que je ne veux pas que ceux-ci apparaissent sur le site en ligne .. Je peux définir une variable $ local = 1; mais je vais devoir changer cela avant de télécharger. Y a-t-il de toute façon pour automatiser cette tâche?

Serveur local: Wamserver 2.0 / Apache Webserver: Apache


0 commentaires

7 Réponses :


18
votes

Vérifiez $ _ Server ['Remote_addr'] == '127.0.0.1' . Cela ne sera vrai que s'il fonctionne localement. Sachez que cela signifie également que cela signifie également local vers le serveur. Donc, si vous avez des scripts exécutés sur le serveur qui apportent des demandes à vos pages PHP, elles satisferont également cette condition.


7 commentaires

Merci ça a fonctionné! $ local = $ _Server ['Remote_addr'] == '127.0.0.1'? 1: 0; est ce que j'ai utilisé :)


Notez que si vous avez effectué n'importe quel type de travail sur votre réseau 127.0.0.1 peut ne pas être l'adresse IP de votre serveur. Assurez-vous de remplacer la propriété intellectuelle ci-dessus avec l'adresse IP réelle de votre serveur.


Autorisez également certains serveurs (comme Mac OSX) signalant la valeur IPv6, vous auriez donc besoin de: $ local = ($ _server ['"Remote_addr'] == '127.0.0.1' || ':: 1') < / code> ou similaire. Vous pouvez également utiliser la valeur http_host si votre environnement local utilise un nom d'hôte différent comme MySite.Local, etc.


@Matthieu localhost n'a pas d'importance car nous parlons des adresses IP. Merci pour les commentaires Charles et LDG!


@ La réponse de Kepppla fait beaucoup plus de sens.


Cela ne fonctionne que sur un environnement Web, ne fonctionnera pas sur PHP CLI.


@Pablopazos La question pose explicitement une demande d'application Web.



3
votes

vous devez automatiser le déploiement

Ce n'est pas directement la réponse à votre question, mais à mon avis, la meilleure façon. Dans un processus de déploiement automatisé, définissez une variable comme local = true , comme d'autres valeurs de configuration (par exemple, votre connexion DB) ne serait pas manuelle, une erreur d'erreur, une tâche.

Vérification de la "localité" est à mon avis la mauvaise façon: vous ne voulez pas montrer vos journaux à chaque visiteur local (un proxy peut en être un), mais seulement lorsqu'il est déployé dans un environnement de test .

Un outil populaire pour le déploiement automatisé est Capistrano , il devrait y avoir php OutilsCentriques aussi.


3 commentaires

Si quelqu'un visitez votre site via Web, l'adresse IP que vous voyez ne sera jamais 127.0.0.1 (ou :: 1 pour IPv6), quelle que soit l'utilisation d'un Procuration. (Sauf si bien sûr, vous exécutez le proxy vous-même sur le même serveur;)


Jenkins et Cruisecontrol avec PHPunderControl sont également bons pour une intégration continue avec PHP.


@Michael Mior: Oui, c'était le cas, proxy sur la même machine.



0
votes

J'ai construit cette fonction qui vérifie si le nom de serveur fort> actuel strong> a NAME Server fort> enregistrements, normalement serveur local ne dispose pas.

<?php
function isLocal ()
{
  return !checkdnsrr($_SERVER['SERVER_NAME'], 'NS');
}
?>


0 commentaires

2
votes

Juste au cas où cela est utile à quiconque, j'ai fait cette fonction comme les réponses ci-dessus ne faisaient pas vraiment ce que je cherchais:

function is_local() {
    if($_SERVER['HTTP_HOST'] == 'localhost'
        || substr($_SERVER['HTTP_HOST'],0,3) == '10.'
        || substr($_SERVER['HTTP_HOST'],0,7) == '192.168') return true;
    return false;
}


2 commentaires

Pour la vérification de l'adresse IP de l'hôte, utilisez $ _ serveur ['serveur_addr']


Ne fonctionne pas sur CLI.



1
votes
$whitelist = array(
    '127.0.0.1',
    '::1'
);

if(!in_array($_SERVER['REMOTE_ADDR'], $whitelist)){
    // not valid
}

0 commentaires

5
votes

Je pense que la meilleure approche consiste à "faux" un mode de test, qui peut être fait en créant un fichier dans votre environnement local.
Quand j'ai utilisé cette approche, j'ai créé un fichier texte vide appelé test.txt , puis utilisé le code suivant: xxx

Cette approche est 100% compatible avec tout système d'exploitation avec tout système d'exploitation et vous pouvez utiliser plusieurs fichiers de test au cas où vous voulez une approche plus granulaire (par exemple, développement.txt , test.txt , stadification.txt , ou production.txt ) afin de personnaliser votre processus de déploiement.


0 commentaires

0
votes

Votre serveur distant est peu susceptible d'avoir une lecteur C! Donc je cours avec ceci: xxx


0 commentaires