PageRenderTime 44ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/spip/ecrire/inc/headers.php

https://github.com/eyeswebcrea/espace-couture-sittler.fr
PHP | 170 lines | 111 code | 23 blank | 36 comment | 21 complexity | 86857cf074d71011826db4384aac370b MD5 | raw file
Possible License(s): LGPL-2.1, GPL-3.0
  1. <?php
  2. /***************************************************************************\
  3. * SPIP, Systeme de publication pour l'internet *
  4. * *
  5. * Copyright (c) 2001-2011 *
  6. * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
  7. * *
  8. * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
  9. * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
  10. \***************************************************************************/
  11. if (!defined('_ECRIRE_INC_VERSION')) return;
  12. // envoyer le navigateur sur une nouvelle adresse
  13. // en evitant les attaques par la redirection (souvent indique par 1 $_GET)
  14. // http://doc.spip.org/@redirige_par_entete
  15. function redirige_par_entete($url, $equiv='', $status = 302) {
  16. if (!in_array($status,array(301,302)))
  17. $status = 302;
  18. $url = trim(strtr($url, "\n\r", " "));
  19. # en theorie on devrait faire ca tout le temps, mais quand la chaine
  20. # commence par ? c'est imperatif, sinon l'url finale n'est pas la bonne
  21. if ($url[0]=='?')
  22. $url = url_de_base().(_DIR_RESTREINT?'':_DIR_RESTREINT_ABS).$url;
  23. if ($url[0]=='#')
  24. $url = self('&').$url;
  25. if ($x = _request('transformer_xml'))
  26. $url = parametre_url($url, 'transformer_xml', $x, '&');
  27. if (defined('_AJAX') AND _AJAX)
  28. $url = parametre_url($url, 'var_ajax_redir', 1, '&');
  29. // ne pas laisser passer n'importe quoi dans l'url
  30. $url = str_replace(array('<','"'),array('&lt;','&quot;'),$url);
  31. // interdire les url inline avec des pseudo-protocoles :
  32. if (
  33. (preg_match(",data:,i",$url) AND preg_match("/base64\s*,/i",$url))
  34. OR preg_match(",(javascript|mailto):,i",$url)
  35. )
  36. $url ="./";
  37. // Il n'y a que sous Apache que setcookie puis redirection fonctionne
  38. if (!$equiv OR (strncmp("Apache", $_SERVER['SERVER_SOFTWARE'],6)==0) OR defined('_SERVER_APACHE')) {
  39. @header("Location: " . $url);
  40. $equiv="";
  41. } else {
  42. @header("Refresh: 0; url=" . $url);
  43. $equiv = "<meta http-equiv='Refresh' content='0; url=$url'>";
  44. }
  45. include_spip('inc/lang');
  46. if ($status!=302)
  47. http_status($status);
  48. echo '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">',"\n",
  49. html_lang_attributes(),'
  50. <head>',
  51. $equiv,'
  52. <title>HTTP '.$status.'</title>
  53. </head>
  54. <body>
  55. <h1>HTTP '.$status.'</h1>
  56. <a href="',
  57. quote_amp($url),
  58. '">',
  59. _T('navigateur_pas_redirige'),
  60. '</a></body></html>';
  61. spip_log("redirige $status: $url");
  62. exit;
  63. }
  64. // http://doc.spip.org/@redirige_formulaire
  65. function redirige_formulaire($url, $equiv = '', $format='message') {
  66. if (!_AJAX
  67. AND !headers_sent()
  68. AND !_request('var_ajax')) {
  69. redirige_par_entete(str_replace('&amp;','&',$url), $equiv);
  70. }
  71. // si c'est une ancre, fixer simplement le window.location.hash
  72. elseif($format=='ajaxform' AND preg_match(',^#[0-9a-z\-_]+$,i',$url)) {
  73. return array(
  74. // on renvoie un lien masque qui sera traite par ajaxCallback.js
  75. "<a href='$url' name='ajax_ancre' style='display:none;'>anchor</a>",
  76. // et rien dans le message ok
  77. '');
  78. }
  79. else {
  80. // ne pas laisser passer n'importe quoi dans l'url
  81. $url = str_replace(array('<','"'),array('&lt;','&quot;'),$url);
  82. $url = strtr($url, "\n\r", " ");
  83. # en theorie on devrait faire ca tout le temps, mais quand la chaine
  84. # commence par ? c'est imperatif, sinon l'url finale n'est pas la bonne
  85. if ($url[0]=='?')
  86. $url = url_de_base().(_DIR_RESTREINT?'':_DIR_RESTREINT_ABS).$url;
  87. $url = str_replace('&amp;','&',$url);
  88. spip_log("redirige formulaire ajax: $url");
  89. include_spip('inc/filtres');
  90. if ($format=='ajaxform')
  91. return array(
  92. // on renvoie un lien masque qui sera traite par ajaxCallback.js
  93. '<a href="'.quote_amp($url).'" name="ajax_redirect" style="display:none;">'._T('navigateur_pas_redirige').'</a>',
  94. // et un message au cas ou
  95. '<br /><a href="'.quote_amp($url).'">'._T('navigateur_pas_redirige').'</a>'
  96. );
  97. else // format message texte, tout en js inline
  98. return
  99. // ie poste les formulaires dans une iframe, il faut donc rediriger son parent
  100. "<script type='text/javascript'>if (parent.window){parent.window.document.location.replace(\"$url\");} else {document.location.replace(\"$url\");}</script>"
  101. . http_img_pack('searching.gif','')
  102. . '<br />'
  103. . '<a href="'.quote_amp($url).'">'._T('navigateur_pas_redirige').'</a>';
  104. }
  105. }
  106. // http://doc.spip.org/@redirige_url_ecrire
  107. function redirige_url_ecrire($script='', $args='', $equiv='') {
  108. return redirige_par_entete(generer_url_ecrire($script, $args, true), $equiv);
  109. }
  110. // http://doc.spip.org/@http_status
  111. function http_status($status) {
  112. global $REDIRECT_STATUS, $flag_sapi_name;
  113. static $status_string = array(
  114. 200 => '200 OK',
  115. 204 => '204 No Content',
  116. 301 => '301 Moved Permanently',
  117. 302 => '302 Found',
  118. 304 => '304 Not Modified',
  119. 401 => '401 Unauthorized',
  120. 403 => '403 Forbidden',
  121. 404 => '404 Not Found'
  122. );
  123. if ($REDIRECT_STATUS && $REDIRECT_STATUS == $status) return;
  124. $php_cgi = ($flag_sapi_name AND preg_match(",cgi,i", @php_sapi_name()));
  125. if ($php_cgi)
  126. header("Status: ".$status_string[$status]);
  127. else
  128. header("HTTP/1.0 ".$status_string[$status]);
  129. }
  130. // Retourne ce qui va bien pour que le navigateur ne mette pas la page en cache
  131. // http://doc.spip.org/@http_no_cache
  132. function http_no_cache() {
  133. if (headers_sent())
  134. { spip_log("http_no_cache arrive trop tard"); return;}
  135. $charset = empty($GLOBALS['meta']['charset']) ? 'utf-8' : $GLOBALS['meta']['charset'];
  136. // selon http://developer.apple.com/internet/safari/faq.html#anchor5
  137. // il faudrait aussi pour Safari
  138. // header("Cache-Control: post-check=0, pre-check=0", false)
  139. // mais ca ne respecte pas
  140. // http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9
  141. header("Content-Type: text/html; charset=$charset");
  142. header("Expires: 0");
  143. header("Last-Modified: " .gmdate("D, d M Y H:i:s"). " GMT");
  144. header("Cache-Control: no-store, no-cache, must-revalidate");
  145. header("Pragma: no-cache");
  146. }
  147. ?>