Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   validFormat Class для PHP (https://javascript.ru/forum/server/20705-validformat-class-dlya-php.html)

devote 14.08.2011 15:57

validFormat Class для PHP
 
Вложений: 1
Вчера заказчик позвонив мне, разочаровано выговаривал мне мол файлы которые возможны для загрузки проверяются по расширению файла, и этого не достаточно, так как говорит за небольшое время работы сайта, пользователи на загружали файлов совершенно не имеющих отношения к тем что разрешены, то-есть расширение файлов все как положено но вот не задача, внутри файлов, оказывается совершенно не тот контент, что должно быть учитывая расширение файла. На его сайте разрешено загружать лишь два формата файлов это .DOC и .DOCX которые в последствии конвертируются в PNG нужное количество страниц. Сказав ему о том что я подумаю что сделать с этим, мы закончили беседу. После разговора с ним, я сидел и раздумывал как быть. Порылся немного в нете, посмотрел на файлы изнутри, зная то что .DOCX это обычный xml упакованный в ZIP архив, но тут назрел вопрос, а как же быть с файлами .DOC ? Поковыряв файл этого формата я ничего другого не придумал, как лишь только начать разбирать его на части, выковыривая из него нужные данные которые указывают на тип документа. Формат DOC и XLS друг на друга очень похожи, та же сигнатура, те же блоки, по сути они идентичны оставалось лишь одно, вытащить из них информационный блок. Вот собственно из за этого я тут и пишу, спустя несколько часов я все же разработал класс для определения корректности файлов, и соответственно выкладываю его на обозрение.

Имя Класса: validFormat
Тип Класса: Static
Версия: 1.0.1
Требуется: PHP >= 5.2.0

Использование очень простое, подключаем класс через один из возможных видов подключения типа require, include и т.д. Затем используем его примерно так:
if ( validFormat::is_doc( 'file.doc' ) ) {
    echo "Yes it's DOC";
} else {
    echo "No, this is not DOC";
}

пока поддерживает лишь четыре формата файлов, функции для них:
validFormat::is_doc();
validFormat::is_docx();
validFormat::is_xls();
validFormat::is_xlsx();

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

Все копирайты написанные внутри файла прошу не затирать.

С уважением! Всем приятной работы.

x-yuri 15.08.2011 01:49

могу предложить источник для новых идей...

devote 15.08.2011 08:34

Цитата:

Сообщение от x-yuri (Сообщение 120569)
могу предложить источник для новых идей...

И к чему это? Ты как бы намекаешь что я выдумываю велосипед? или наоборот о том о чем я не понял видимо тебя.

x-yuri 16.08.2011 04:40

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

devote 16.08.2011 09:16

аа... ну да есть такое... Идей много, времени мало =)

bugmenot 23.08.2011 23:35

public static function is_xls( $file ) {
		if ( ( $info = validFormat::read_doc_xls_info( $file ) ) !== false ) {
			if ( isset( $info['Workbook'] ) || isset( $info['Book'] ) ) {
				return true;
			}
		}
		return false;
	}


Одной строкой заменяется

devote 23.08.2011 23:42

Цитата:

Сообщение от bugmenot
Одной строкой заменяется

я вкурсе, а пишу так по простой причине, для наглядности, когда код сжат, это больше становиться похожим на кашу.

x-yuri 24.08.2011 16:10

Цитата:

Сообщение от devote
когда код сжат, это больше становиться похожим на кашу.

а когда размазан, на... сами знаете что :) к тому же не все каши одинаково полезны и повторение - мать заикания :lol: (не следует воспринимать всерьез)

devote 25.08.2011 00:52

Народ, я написал так лишь для удобства читаемости кода, так как понимал что кину его на всеобщее обозрение... Я не против того если вам хочется иметь кашу, можете хоть весь код сделать в одну строку... Как пожелаете.


Часовой пояс GMT +3, время: 16:00.