J'ai un script PHP qui exécute un processus externe.Lighttpd mise en cache shell_exec() sortie?
Le processus externe génère une chaîne JSON avec des données du système qui change de temps en temps. Lorsque j'exécute le processus externe, je peux clairement voir que la chaîne JSON est différente chaque fois que je l'exécute.
Cependant, lorsque j'appelle mon script PHP en utilisant AJAX à partir d'un navigateur Web, la chaîne JSON n'est pas mise à jour après le premier appel au script PHP.
La seule fois où la chaîne JSON est mise à jour, c'est si je rafraîchis la page ou si j'exécute le processus externe manuellement lorsque je suis dans le site Web.
Pourquoi cela se produit-il?
Est-ce que LIGHTTPD cache la sortie?
EDIT:
Voici le contenu de mon fichier de configuration lighttpd:
server.modules = (
"mod_access",
"mod_cgi",
"mod_alias",
"mod_compress",
"mod_redirect",
# "mod_rewrite",
)
server.document-root = "/var/www"
server.upload-dirs = ("/var/cache/lighttpd/uploads")
server.errorlog = "/var/log/lighttpd/error.log"
server.pid-file = "/var/run/lighttpd.pid"
server.username = "www-data"
server.groupname = "www-data"
server.port = 80
index-file.names = ("index.php", "index.html", "index.lighttpd.html")
url.access-deny = ("~", ".inc")
static-file.exclude-extensions = (".php", ".pl", ".fcgi")
compress.cache-dir = "/var/cache/lighttpd/compress/"
compress.filetype = ("application/javascript", "text/css", "text/html", "text/plain")
# default listening port for IPv6 falls back to the IPv4 port
include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
$HTTP["url"] =~ "/cgi-bin/" {
cgi.assign = ("" => "")
}
cgi.assign = (
".cgi" => ""
)
EDIT
According to the following Google Product thread une personne appelée johnjbarton
mentionne ce qui suit:
Ok, j'ai parlé avec un expert de cache Chrome. Le problème dans mon cas est très probablement décrit sur ce bogue: Bug 30862 - Dynamiquement inséré sous-ressources ne sont pas revalidation même lorsque le document contenant est rechargées https://bugs.webkit.org/show_bug.cgi?id=30862
La force rafraîchir la seule ressource des forces chargées dans la page externe . Il ne force pas l'actualisation sur les ressources chargées XHR. Qui est à peu près toutes les ressources dans une application dojo.
Quand je regarde la console de chrome dans la section Network
il dit que toutes les demandes que mon site est de type fait ne soient XHR
.
Est-ce que cela peut être lié?
EDIT
Les en-têtes de ma demande sont
Accept */*
Content-Type application/x-www-form-urlencoded
TRÈS IMPORTANT EDIT J'ai modifié mon script PHP pour qu'il ajoute les résultats du le processus exécute dans un fichier journal.
Il s'avère que la sortie du processus est toujours la même.Cependant, lorsque j'exécute le processus manuellement, il change constamment comme prévu.
Il me semble que LIGHTTPD met en cache la sortie du processus qu'il exécute.
EDIT
Voici ce que mon script PHP ressemble:
<?php
session_start();
if(!isset($_SESSION['user'])){
header("Location: /");
} else {
header('Content-type: application/json');
$output = shell_exec('/home/debian/myProcess/myProcess');
file_put_contents("/var/log/lighttpd/access.log", $output, FILE_APPEND | LOCK_EX);
echo $output;
}
>
Pouvez-vous publier des parties pertinentes de la configuration lighttpd? – Will
Dans votre navigateur vérifier le trafic réseau lors des appels AJAX, il est très probable que le résultat est mis en cache dans votre navigateur. Vérifiez avec n'importe quel framework JS que vous utilisez pour AJAX sur la façon d'éviter la mise en cache des réponses AJAX, si vous n'utilisez pas un framework, vous devrez par exemple. ajouter un horodatage à chaque URL de requête. – Eborbob
@Eborbob oh, d'accord. Alors, comment ajouter un horodatage et où dois-je ajouter cet horodatage? Est-ce que je l'ajoute du côté client ou côté serveur? Avez-vous des suggestions sur où je peux en lire plus à ce sujet? Et enfin: Pourquoi un horodatage changerait-il le comportement de la mise en cache du navigateur? – vaid