2010-11-26 29 views
5

J'ai ce fichier script.php que je veux exécuter en tant que travail cron sur mon serveur linux/apache.Exécution d'un script.php sur un travail cron sur le serveur linux/apache mais restriction de l'accès public au fichier php

Toutefois, je ne veux pas que public accède à www.mycompanyname.com/script.php et exécute également le script simultanément.

Comment pouvons-nous empêcher cela? Comment pouvons-nous limiter le script à l'accès du serveur seulement? Utilise-t-il chmod ou place-t-il quelque chose dans le fichier .htaccess, quelque chose le long de la ligne?

Un conseil?

Répondre

2

Vous avez probablement quelque chose comme un répertoire public_html, dans lequel vous avez tous les phps. Mettez-le juste en dehors de ce répertoire.

+0

ohh, sons que je ne pensais pas logique .. Je probablement oublié le public_html est la racine mappée au nom d'hôte au lieu des répertoires externes. Comme mon script.php a besoin d'apache pour s'exécuter, je présume que le répertoire en dehors du public_html est toujours exécutable? – flyclassic

+0

Bien sûr! vous avez juste besoin d'une permission pour votre utilisateur dans le répertoire (je suppose que le cron s'exécute en tant que votre utilisateur) – cambraca

7

Vous pouvez le faire comme la première ligne de PHP dans script.php ...

if (PHP_SAPI !== 'cli') { 
    exit; 
} 

Si quelqu'un frappe votre script via HTTP, le PHP_SAPI sera cgi je crois, et non cli, ce qui provoque votre script sortez tout de suite.

Bien sûr, cela dépend de votre appel cron php script.php.

Vous pouvez également envoyer ...

header('HTTP/1.0 404 Not Found'); 

... ou bien sûr, laisser en dehors de votre racine web.

6

Si vous placez le script en dehors du dossier webroot, il ne sera pas accessible via votre serveur Web. par exemple. votre Webroot est dans/var/www/public_html/ vous mettez le script.php en dehors de ce dossier, par exemple:/var/www/