@sergo573

Как записать ip в файл, через ajax?

Приветствую всех, кто зашёл в эту тему!
Вопрос такой, использую запись ip в файл txt на сайте wordpress.
Следующий код работает и записывает ip в файл, если его поместить на страницу:
$ip = $_SERVER['REMOTE_ADDR'];
$data = $ip."\r\n";
file_put_contents('test.txt', $data, FILE_APPEND);

Но, мне нужно что бы ip записывался через определенное время, подумал, что использовать setTimeout и AJAX будет правильным, и написал следующее:
jQuery(document).ready(function($){
let ipklienta = '<?php echo $ip ?>';
function zapis_ip() {
	$.ajax({
		url: '/wp-admin/admin-ajax.php',
		type: "POST",
		data: {
			action: 'zapis_ip',
			ipklienta: ipklienta,
		},
            success: function (data) { }
	});
}
setTimeout(zapis_ip, 10000);
});

В function.php прописываю следующее:
add_action("wp_ajax_zapis_ip", "k_ajax_zapis_ip"); 
add_action("wp_ajax_nopriv_zapis_ip", "k_ajax_zapis_ip");
function k_ajax_zapis_ip(){
$ipklienta = $_POST['ipklienta'];
$zapis = "записалось ".$ipklienta."\r\n";
file_put_contents('test.txt', $zapis, FILE_APPEND);
}


Но ничего не записывается... вопрос: Почему? Хотя ajax срабатывает, если прописать alert в success.

Или есть другой способ запустить запись в файл через определенное время?
Главная суть тут, нужна запись если пользователь не ушёл с сайта.
  • Вопрос задан
  • 95 просмотров
Решения вопроса 1
@sergo573 Автор вопроса
Ответ был так близок...
В общем, он записывал в файл txt по пути: /wp-admin/test.txt
Исправил код на
file_put_contents($_SERVER['DOCUMENT_ROOT'].'/test.txt', $zapis, FILE_APPEND);

И всё заработало как надо :)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Привет!

Во-первых, ваша практика выполнения AJAX-запроса довольно устаревшая.
Для выполнения сетевого запроса используйте Fetch. Более подробно про fetch на примере WordPress.

Во-вторых, для работы с файлами в PHP лучше использовать функции fopen, fwrite:
$path = WP_CONTENT_DIR . '/uploads/path/'; // Обозначим каталог, например в папке темы WordPress (не забудьте создать его в ручную или с помощью функции mkdir)
$data = "записалось" . $ip; // Это ваша строка, которую необходимо записать в файл
$fd = fopen($path . 'test.txt', 'w+');
fwrite($fd, $data);
fclose($fd);
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы