У меня есть база данных Oracle SQL со столбцом CLOB, который содержит большое количество данных. Я столкнулся с проблемой, что регулярная строковая переменная PHP не будет содержать все данные, которые у меня есть в столбце CLOB. Он будет читать только в 4618 бит, но мой файл намного больше. Столбец CLOB содержит в себе ряд IP-адресов. Что мне нужно сделать, это проанализировать столбец CLOB, чтобы я мог извлечь эти IP-адреса; однако строковая переменная не будет содержать достаточно данных, чтобы даже попасть в часть документа, где хранятся IP-адреса. Есть предположения?
Основываясь на ваших комментариях:
Если вы щелкните правой кнопкой мыши в своем браузере и скажите «просмотреть источник», вы увидите, что у вас действительно есть весь файл.
Скорее всего, вам просто нужно установить соответствующий ContentType при отправке данных обратно в браузер.
Во-первых, попробуйте увеличить предел памяти PHP, чтобы узнать, не повлияло ли это на ошибку. Если возвращаемый объект CLOB поистине огромен, как 2 GiB, тогда нет способа (в настоящее время) обрабатывать его в PHP, поскольку весь объект должен храниться в памяти.
Если в столбце указаны данные фиксированной длины, достаточно составить соответствующий запрос, который извлекает часть его. Предполагая, что данные закодированы как текст фиксированной длины, тогда что-то вроде этого будет работать:
// assumes subfield is xxx.xxx.xxx.xxx: 19 fixed characters SELECT substr (TO_CHAR(gnarly_ipadddress_fieldname), 1, 19) as ipaddr1, substr (TO_CHAR(gnarly_ipadddress_fieldname), 20, 19) as ipaddr2, substr (TO_CHAR(gnarly_ipadddress_fieldname), 39, 19) as ipaddr3 FROM table WHERE (whatever);
Если подполя переменной длины, то, возможно, захват чего-то вроде 16K кусков и разбор его на PHP – это путь.