Вставить в базу данных без клиента с PHP

avatar
user3885957
8 апреля 2018 в 02:00
54
1
0

У меня есть веб-сайт PHP, который анализирует XML и отображает его на веб-странице. XML-файл меняется время от времени, поэтому меняется веб-страница. Он меняется каждые 30 минут.

Я хочу получить XML-данные и вставить их в свою базу данных MySQL. Однако я не могу найти способ вставлять данные в базу данных каждый раз, когда обновляется XML, потому что должен быть задействован клиент, и даже в этом случае данные будут вставляться несколько раз, если страница посещалась более одного раза за эти 30 минут. промежуток времени.

Каждый раз при обновлении файла XML я хотел бы, чтобы мои данные выглядели следующим образом:

XML -> PHP -> База данных

Это может оказаться невозможным, поэтому я понимаю, что мне, возможно, придется использовать отдельный язык сценариев для обновления базы данных с помощью XML-содержимого, сформулированного в виде фразы. Из-за того, что изменения XML должны инициировать обновление базы данных, в этом случае PHP может не работать. XML обновляется с помощью короткого сценария Bash. Я изучал использование BASH, но, похоже, он не очень хорошо подходит для синтаксического анализа XML и обновления баз данных, плюс для меня это будет огромная кривая обучения. Я запускаю это на машине с Ubuntu.

Любые предложения и помощь приветствуются.

Источник
user9487972
8 апреля 2018 в 02:36
0

как xml обновляется?

user3885957
8 апреля 2018 в 02:39
0

Через нмап. Nmap не имеет возможностей базы данных. Просто XML

user9487972
8 апреля 2018 в 02:51
0

cron, чтобы проверить, изменилась ли дата файла, а затем, возможно, импортировать. если вы полагаетесь на посещение клиента, просто зарегистрируйте его или проверьте временные метки файлов, чтобы остановить дублирование

user3885957
8 апреля 2018 в 02:53
0

Как мне обновить базу данных? Тогда мне пришлось бы делать это через другой язык сценариев. Я мог бы даже проверить это с помощью только php и без задания Cron, но я столкнулся с той же ошибкой, что мне нужен клиент для помещения данных в базу данных.

user9487972
8 апреля 2018 в 02:56
0

просто сделайте это с помощью php. xml в mysql db с php тривиально

user3885957
8 апреля 2018 в 03:01
0

Извините, но я не понимаю. если никто не посещает веб-страницу, данные будут вставлены в базу данных, а если 10 человек посетят веб-сайт, одни и те же данные будут отправлены 10 раз. Вот почему у меня проблема с использованием php

user9487972
8 апреля 2018 в 03:02
0

журнал был вставлен, проверьте журнал перед повторной вставкой

Tim Morton
8 апреля 2018 в 03:04
0

Используйте интерфейс командной строки PHP. Вы назначаете задание cron (или планировщик задач для Windows) для запуска сценария с любой выбранной вами частотой.

user3885957
8 апреля 2018 в 03:05
0

Это устраняет проблему дублирования, но если никто не заходит на сайт, то данные не добавляются в базу данных.

user9487972
8 апреля 2018 в 03:05
0

следовательно, вариант задания cron, который я уже упоминал

Tim Morton
8 апреля 2018 в 03:10
0

хех, хотя можно было бы возразить, что пока кто-то не зайдет на сайт, нужно ли обновлять данные? (Тем не менее, cron job / планировщик задач — это то, что нужно.)

user3885957
8 апреля 2018 в 03:10
0

Я не знаком с php CLI. Спасибо, Смит и Тим, я рассмотрю возможность использования PHP CLI с заданием Cron.

Ответы (1)

avatar
user3885957
9 апреля 2018 в 13:50
0

Благодаря Смиту и Тиму Мортону я нашел решение.

Я создал отдельный файл PHP, который будет анализировать XML в переменные и вставлять данные в базу данных.

Для запуска сценария Nmap, обновляющего XML-файл, я использовал задание cron, вызывающее сценарий bash. В сценарии bash после запуска Nmap я изменил расположение каталога на папку, содержащую мой сценарий, а также мой XML-файл. Затем я запустил файл PHP с помощью PHP CLI ( php -f /xxx/xxx/php.php ).

Поэтому вместо того, чтобы использовать триггер, чтобы узнать, изменился ли файл XML, я обновил базу данных в другом файле PHP, который был вызван в том же сценарии bash.

ЭТО работало так:

             Cron job > BASH script > Run Nmap       > update XML
                                    > call PHP file  > update database

Еще раз спасибо, Смит и Тим Мортон