Warning: fopen(C:/OSPanel/OSPanel/domains/test.ru/): failed to open stream: No such file or directory in C:\OSPanel\OSPanel\domains\test.ru\php\clicks.php on line 5
Warning: flock() expects parameter 1 to be resource, boolean given in C:\OSPanel\OSPanel\domains\test.ru\php\clicks.php on line 6
Warning: fclose() expects parameter 1 to be resource, boolean given in C:\OSPanel\OSPanel\domains\test.ru\php\clicks.php on line 20
<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', 'php/clicks.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;
}
});
http.send('url=' + location.pathname);
}
});
</script>
<?php //clicks.php
if (isset ($_POST['url'])) {
$fn = $_SERVER['DOCUMENT_ROOT'] . $_POST['url'];
if (file_exists($fn)) {
$f = fopen($fn, "r+");
if (flock($f, LOCK_EX)) {
$fr = fread($f, filesize($fn));
$pattern = '/(<output id="statlike">)(\d+)(<\/output>)/i';
$line_ok = preg_match($pattern, $fr, $matches);
if($line_ok == 1) {
$m = $matches[2] + 1;
$fr = preg_replace($pattern, '${1}'.$m.'$3', $fr, 1);
rewind($f);
ftruncate($f, 0);
fwrite($f, $fr);
}
echo $m;
flock($f, LOCK_UN);
}
fclose($f);
}
}
?>
$fn = $_SERVER['DOCUMENT_ROOT'] . $_POST['url'];
file_exists
не годится, так как он проверяет наличие файла или директории, а у Вашего файла нет расширения вот он и дает true так как директория есть. Тут оправданно будет is_writable()