Задать вопрос
@fOstere

Почему php обработчик не хочет работать на главной странице?

Здравствуйте, какая-то мистика происходит, может здесь есть люди понимающие о чем речь.

Страница на index.html главный страница сразу перекидывает на основу без index.html а просто сайт.ру
И вот какая проблема, если открывать luboenazvanie.html и вставлять счетчик нажатий на ссылку, он работает.
А на главной странице, почему то не работает, а через index.html снова работает.
Подскажите почему, вдруг где ошибка, скинул все что может понадобиться.
Очень надеюсь на знающего человека, спасибо:)

взял за основу

<a href="#" id="like">Файл [скачено <output id="statlike">0</output> раз]</a>

<script>
document.getElementById('like').addEventListener('click', function(e){
  if (window.XMLHttpRequest) {
    var http = new XMLHttpRequest();
    http.open('POST', 'stat.php');  // совет: заменить на абсолютный адрес, например, http://сайт.ru/stat.php
    http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    http.addEventListener('readystatechange', function() {
      if (this.readyState == 4 && this.status == 200) {
        document.getElementById('statlike').innerHTML = this.responseText;  // изменить число в теге output, после того, как запрос будет исполнен
      }
    });
    http.send('url=' + location.pathname);  // передать в POST запросе адрес файла, который нужно изменить
  }
});
</script>


php обработчик
<?php
if (isset ($_POST['url'])) { // если переменная установлена (передана)
$fn = $_SERVER['DOCUMENT_ROOT'] . $_POST['url']; // абсолютный адрес файла
if (file_exists($fn)) { // если файл существует
$f = fopen($fn, "r+"); // открыть файл
if (flock($f, LOCK_EX)) { // заблокировать файл, пока выполняется скрипт [php.net]
$fr = fread($f, filesize($fn)); // записать в переменную содержимое файла
$pattern = '/()(\d+)(<\/output>)/i';
$line_ok = preg_match($pattern, $fr, $matches);
if($line_ok == 1) { // если в содержимом был найден тег output с id="statlike"
$m = $matches[2] + 1; // к числу прибавить 1
$fr = preg_replace($pattern, '${1}'.$m.'$3', $fr, 1); // изменить число в содержимом
rewind($f); // переместить указатель в начало файла
ftruncate($f, 0); // очистить файл
fwrite($f, $fr); // записать в файл содержимое с изменённым числом
}
echo $m; // вывести число, чтобы передать в JS
flock($f, LOCK_UN); // разблокировать файл
}
fclose($f); // закрыть файл
}
}
?>
.htaccess
AddDefaultCharset utf-8
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^/?(.*) https://%1/$1 [L,R=permanent]

RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ http://%{HTTP_HOST}/ [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.htm\ HTTP/
RewriteRule ^index\.htm$ http://%{HTTP_HOST}/ [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://%{HTTP_HOST}/ [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\ HTTP/
RewriteRule ^index$ http://%{HTTP_HOST}/ [R=301,L]

##ERRORS
ErrorDocument 401 /errors404/errors404.html
ErrorDocument 403 /errors404/errors404.html
ErrorDocument 404 /errors404/errors404.html
ErrorDocument 500 /errors404/errors404.html
  • Вопрос задан
  • 115 просмотров
Подписаться 1 Простой 12 комментариев
Решения вопроса 1
KorniloFF
@KorniloFF
Работаю по font-end / JS
А как будет существовать файл
if (file_exists($fn)) { // если файл существует
При значении location.pathname для главной страницы "/" ?
'url=' + location.pathname
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы