В настоящее время я получаю список каталогов с нескольких разных жестких дисков и сохраняю каждый из них в виде текстового файла. Затем я объединяю эти файлы в один текстовый файл большего размера, а затем импортирую текстовый файл в таблицу MySQL, чтобы я мог извлечь каждый компонент из строки (каждую строку текстового файла) в соответствующие поля моей таблицы. Каждая строка форматируется следующим образом:
Диск:\имя_папки\имя_файла.EXT размер_файла
пример:
C:\example\example.txt 123456
Я уже давно успешно делаю это в MS Access. Единственная проблема в Access, каждая команда должна быть по одной.
Я хочу использовать файл PHP, чтобы сделать весь длительный процесс более автоматизированным и менее подверженным ошибкам. Я новичок в программировании на PHP и во многом полагался на этот замечательный сайт в своем прогрессе, которого я достиг до сих пор.
Команды SQL, которые я использую в MS Access:
UPDATE DirList_FORMATED SET fileSizeRAW = Mid([pathRAW], InStrRev([pathRAW]," ")+1);
UPDATE DirList_FORMATED SET path = REPLACE(pathRAW, fileSizeRAW, '');
UPDATE DirList_FORMATED SET path = Trim(path);
UPDATE DirList_FORMATED SET fileExt = Mid([path], InStrRev([path],".")+1);
UPDATE DirList_FORMATED SET drive = Left(path, 1);
UPDATE DirList_FORMATED SET path = REPLACE(path, 'M:\', '') WHERE Left(path, 1) = 'M';
UPDATE DirList_FORMATED SET path = REPLACE(path, 'N:\', '') WHERE Left(path, 1) = 'N';
UPDATE DirList_FORMATED SET path = REPLACE(path, 'O:\', '') WHERE Left(path, 1) = 'O';
UPDATE DirList_FORMATED SET path = REPLACE(path, 'P:\', '') WHERE Left(path, 1) = 'P';
UPDATE DirList_FORMATED SET path = Left([path], InStrRev([path],".")-1);
UPDATE DirList_FORMATED SET folderName = Left([path], InStr([path],"\")-1);
UPDATE DirList_FORMATED SET fileName = Mid([path], InStrRev([path],"\")+1);
UPDATE DirList_FORMATED SET flag = 'y'
Where fileExt = 'srt'
or fileExt = 'db'
Delete from DirList_FORMATED
where flag = 'y';
UPDATE DirList_FORMATED SET fileSizeGB = (((fileSizeRAW /1024)/1024)/1024);
UPDATE DirList_FORMATED SET fileSizeGB = ROUND(fileSizeGB, 3);
используя PHP-код, я успешно:
Следующим шагом является получение компонентов строки pathRAW и сохранение их в соответствующем поле, но пока мне это не удалось. Мне нужно извлечь размер файла, имя файла, расширение (расширение файла), имя папки и диск (букву диска) из каждой строки и поместить их в соответствующие поля таблицы.
Любая помощь, которая поможет мне начать или указать правильное направление, будет очень признательна :)
мой php-код на данный момент:
<?php
// Include the database config file
include_once 'assets/includes/dbConfig.php';
$query = "DELETE FROM DirList_FORMATED";
$conn->query($query);
echo 'DirList_FORMATED emptied <br/>';
$query = "INSERT INTO DirList_FORMATED (pathRAW) SELECT pathRAW FROM DirList_RAW WHERE pathRAW is not null";
$conn->query($query);
echo 'DirList_RAW inserted <br/>';
$query = "UPDATE DirList_FORMATED SET fileSizeRAW = Mid(['pathRAW'], InStrRev(['pathRAW'], ' ' )+1);";
$conn->query($query);
echo 'fileSizeRAW created <br/>';
?>
последняя строка продолжает выдавать ошибку синтаксиса
Я попробовал несколько вариантов цитат, но все равно ничего не понравилось :(
🤔 А знаете ли вы, что...
PHP имеет встроенную поддержку сессий для отслеживания состояния пользователей на веб-сайтах.
Образец.
Файл для загрузки:
C:\example\example.txt 123456
D:\example2\example2.txt 123456789
E:\example3.data\example3.txt.txt 123456789012
F:\example3.txt 123
Структура таблицы:
CREATE TABLE test (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
drive CHAR(1),
path TEXT,
filename TEXT,
fileext TEXT,
filesize BIGINT UNSIGNED,
raw TEXT
);
Запрос:
INSERT INTO test(drive, path, filename, fileext, filesize, raw)
SELECT LEFT(raw, 1),
REGEXP_REPLACE(raw, '^..(.*\\\\)[^\\\\]+$', '$1'),
REGEXP_REPLACE(raw, '^.+\\\\([^\\\\]+)\\.[^.]* \\d+$', '$1'),
SUBSTRING_INDEX(SUBSTRING_INDEX(raw, '.', -1), ' ', 1),
SUBSTRING_INDEX(raw, ' ', -1),
raw
FROM JSON_TABLE(CONCAT('["', REPLACE(REPLACE(CAST(LOAD_FILE('C:/ProgramData/MySQL/MySQL Server 8.4/Uploads/test.csv') AS CHAR), '\\', '\\\\'), '\r\n', '","'), '"]'),
'$[*]' COLUMNS (raw TEXT PATH '$')) jsontable;
Результат:
mysql> SELECT * FROM test;
+----+-------+-----------------+--------------+---------+--------------+------------------------------------------------+
| id | drive | path | filename | fileext | filesize | raw |
+----+-------+-----------------+--------------+---------+--------------+------------------------------------------------+
| 1 | C | \example\ | example | txt | 123456 | C:\example\example.txt 123456 |
| 2 | D | \example2\ | example2 | txt | 123456789 | D:\example2\example2.txt 123456789 |
| 3 | E | \example3.data\ | example3.txt | txt | 123456789012 | E:\example3.data\example3.txt.txt 123456789012 |
| 4 | F | \ | example3 | txt | 123 | F:\example3.txt 123 |
+----+-------+-----------------+--------------+---------+--------------+------------------------------------------------+