Ежедневная загрузка файла журнала Apache в базу данных Oracle с использованием PHP / Javascript

Я ежедневно создаю файлы журнала Apache. Теперь мне нужно ежедневно вставлять данные этого файла в базу данных Oracle. Я написал код для загрузки файла в базу вручную для одного файла. Однако мне нужен скрипт / код, который автоматически выберет файл из местоположения или просто увеличит имя файла по дате, а затем вставит данные в базу данных (мое имя файла по дате, которая меняется ежедневно. Пример: access.2018.07.24.txt) . Может кто-нибудь помочь.

<?php
$conn = oci_connect('usr1', 'dfdfdf1SS', 'sdsdfdg/XEBH');
if (!$conn) {
   $m = oci_error();
   echo $m['message'], "\n";
   exit;
}
else {
   print "Connected to Oracle!";
   }
$myfile = fopen("access.2018.07.24.txt", "r") or die("Unable to open file!");
while(!feof($myfile)) {
	$content= fgets($myfile);
	$carray=explode(',',$content);
	list($IP_ADDRESS, $USER_IDENTIFIER, $USERID , $REQUEST_TIME , $CLIENT_REQUEST ,$RESPONSE_CODE ,$SIZEOFOBJECT, $COOKIES)=$carray;
	

	$stdii = 'INSERT INTO LOGS(IP_ADDRESS, USER_IDENTIFIER, USERID , REQUEST_TIME , CLIENT_REQUEST ,RESPONSE_CODE ,SIZEOFOBJECT, COOKIES)'.
	'values(:IP_ADDRESS, :USER_IDENTIFIER, :USERID , :REQUEST_TIME , :CLIENT_REQUEST ,:RESPONSE_CODE ,:SIZEOFOBJECT, :COOKIES)';
	$compiled1 = oci_parse($conn, $stdii);
	oci_bind_by_name($compiled1, ':IP_ADDRESS', $IP_ADDRESS);
	oci_bind_by_name($compiled1, ':USER_IDENTIFIER', $USER_IDENTIFIER);
	oci_bind_by_name($compiled1,':USERID', $USERID);
	oci_bind_by_name($compiled1, ':REQUEST_TIME', $REQUEST_TIME);
	oci_bind_by_name($compiled1, ':CLIENT_REQUEST', $CLIENT_REQUEST);
	oci_bind_by_name($compiled1, ':RESPONSE_CODE', $RESPONSE_CODE);
	oci_bind_by_name($compiled1, ':SIZEOFOBJECT', $SIZEOFOBJECT);
	oci_bind_by_name($compiled1, ':COOKIES', $COOKIES);
	oci_execute($compiled1, OCI_COMMIT_ON_SUCCESS);
}
oci_close($conn);
fclose($myfile);
?>

Хотя я бы начал с ведения журнала всех обработанных журналов, которые вы проверяете в первую очередь, поэтому, если сценарий выйдет из строя в течение нескольких дней и никто не заметит (это произойдет), перезапуск получит все недостающие файлы

RiggsFolly 24.07.2018 13:30
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используя класс DateTime в PHP, вы можете сделать это следующим образом. Я предполагаю, что в этом примере вам нужна вчерашняя дата в имени файла

$d = new DateTime();
$yesterday = $d->sub(new DateInterval('P1D'))->format('Y.m.d');
$filename = "access.$yesterday.txt";

echo $filename;

РЕЗУЛЬТАТ (запуск 24/7/2018)

access.2018.07.23.txt

Затем используйте $filename в вызове fopen следующим образом

$myfile = fopen($filename, "r") or die("Unable to open file!");

Спасибо за помощь RiggsFolly. Я пробовал это, но не уверен, как передать это в качестве аргумента при открытии файла. "$ Myfile = fopen ($ filename," r ") or die (" Невозможно открыть файл! ");"

SSneha 24.07.2018 14:16

Я добавил это к ответу

RiggsFolly 24.07.2018 14:18

Вы удалили echo $filename; из моего примера, не так ли?

RiggsFolly 24.07.2018 14:20

да, я его удалил. Ваш код работает нормально. Я допустил ошибку в имени файла (это был доступ. <Дата> .log). Я исправил ошибку и открыл файл. Но теперь в моем массиве есть ошибки. список ($ IP_ADDRESS, $ USER_IDENTIFIER, $ USERID, $ REQUEST_TIME, $ CLIENT_REQUEST, $ RESPONSE_CODE, $ SIZEOFOBJECT, $ COOKIES) = $ carray; Ошибка: Примечание: неопределенное смещение: 7 в C: \ wamp64 \ www \ db_conn \ logs1.php в строке 20

SSneha 24.07.2018 14:32

Похоже, ваш журнал доступа к apache выглядит не так, как вы думали. Также обратите внимание, что не все строки в журнале доступа всегда имеют один и тот же формат. Вам нужно будет проверить строку и ее формат, когда вы ее прочитаете, а затем выведите то, что на самом деле находится в этой строке.

RiggsFolly 24.07.2018 14:40

Спасибо большое. Сегодня я изменил формат файла журнала и соответственно изменил код. Но в этом коде я получал вчерашний файл, который был в другом формате. Спасибо за помощь, теперь все работает нормально. :)

SSneha 24.07.2018 14:45

Другие вопросы по теме