J'ai un bug qui bloque mon site web en PHP. Il se produit sur une page d'entrée, où l'utilisateur remplit un formulaire, puis les données sont mises à jour sur la base de données, puis l'utilisateur reçoit header
redirigé vers une autre page.PHP/Site Web geler sur Chrome sur Mac?
Ce qui se passe est que l'ensemble du site Web "branche" (sous-dossier, par exemple www.example.com/my_site
, mais pas www.example.com/another_site
) se bloque, mais aucun autre site Web accessible par Chrome. Après un certain temps, je peux à nouveau naviguer sur ce site, je suppose que l'opération Chrome a expiré.
Cependant, cela semble se produire uniquement sur Chrome et sur mon Mac. J'ai testé un autre Safari sur ce Mac, Chrome sur un Windows, et les deux ont bien fonctionné. Je dois avouer que ce test n'était pas exhaustif, mais je n'ai qu'un seul Mac à tester. Ce petit test ressemblant à celui de Venn a traversé le navigateur et la machine, ce qui me semble être les facteurs clés.
Voici le code de la page d'écoute. Si je commente la redirection d'en-tête, je ne me dérègle pas. Si je commente le code de mise à jour de la page, je n'obtiens aucun gel. Je ne vois pas ce qui cause le gel ici, vraiment. Machine? OS? Redirection d'en-tête? Opération $ _POST? essayer/attraper la manipulation? Combinaison? Je n'ai aucune idée.
EDIT: Je vois maintenant une corrélation entre la quantité de données passées par $ _POST du formulaire à la page. Si les données sont relativement petites, tout fonctionne correctement. Cependant, lorsque j'obtiens des données plus volumineuses (c'est-à-dire un balisage HTML via un champ éditeur WYSIWYG), le gel se produit. Comment Chrome est-il affecté par cela? Peut-être que la redirection se produit avant de pouvoir tout traiter? Même avec des quantités gigantesques de données, il fonctionne toujours bien sur Mac/Safari et Windows/Chrome.
<?php
require_once("script/initialize.php");
try
{
if (isset($_POST["submit"]))
{
$page = page::from_post();
try
{
$page->validate();
$page->require_edit();
$page->update_by_id();
$page->set_tags_from_post();
$page->set_categories_from_post();
$page->set_workgroups_from_post();
//header("Location: page_view.php?id=".$page->id);
}
catch (InputException $inex)
{
$smarty->assign("error", $inex->getMessage());
}
}
else
{
$page = page::from_id(intval($_GET["id"]));
$page->require_edit();
}
$smarty->assign("ressource", $page);
$smarty->display_self();
}
catch (Exception $ex)
{
$smarty->display_exception($ex);
}
?>
Pour moi, il semble que quelque chose est encore en cours d'exécution, en gardant la session verrouillée. Soit 'session_write_close()' (ou le 'exit' wpearse suggère) devrait être capable de rendre la session disponible à nouveau. Vous devriez cependant vérifier pourquoi votre script prend tellement de temps, avec par exemple le cachegrind de 'xdebug'. – Wrikken