[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Объединить два скрипта и вывести постранично
complex
Файл index.php
<?php

$fb2_file = '44.fb2';

$html = '';
$skip = 0;
$limit = 120000;

$handle = fopen($fb2_file, "r");
if ($handle) {

$transformer = new Transformer();

$bodyFound = false;
$lineNum=0;
while (($line = fgets($handle)) !== false) {

if (!$bodyFound && strstr($line, "<body")) {
$bodyFound = true;
continue;
}

if ($bodyFound) {
$lineNum++;

if (strstr($line, "</body>")) {
break;
}

if ($lineNum < $skip) {
continue;
}

if ($lineNum > $skip + $limit) {
break;
}


$html .= $transformer->transform($line);

}

}


// locate last </p>

$lastP = strrpos($html, '</p>');
if ($lastP !== FALSE) {
$html = substr($html, 0, $lastP + strlen('</p>'));
}

fclose($handle);
} else {
$html = 'Not found';
}

class Transformer {

private $stack = array();

private function replace($matches) {

$tag = strtolower($matches[2]);
$closing = $matches[1];
$attribute = isset($matches[3]) ? $matches[3] : '';

if ($tag == 'empty-line') {
return '<br>';
}

if ($tag == 'image') {
if (preg_match('|href="#([^"]+)"|', $attribute, $matches)) {
return '<img alt="Image" src="/binary.php?id=' . urlencode($matches[1]) . '" />';
}
}


// skips
$skips = array('section', 'a', 'script');
if (in_array($tag, $skips)) { print_r($matches,1);
return '';
}

// parts
$parts = array('epigraph', 'annotation', 'cite', 'poem', 'history', 'title', 'subtitle', 'poem', 'stanza');
if (in_array($tag, $parts)) {
if ($closing) {
$key = array_search($tag, $this->stack);
if ($key !== FALSE) {
unset($this->stack[$key]);
}
}
else {
array_unshift($this->stack, $tag);
}
return '';
}

// paragraphs
$paragraphs = array('text-author', 'p', 'v');
if (in_array($tag, $paragraphs)) {
if ($closing) {
return '</p>';
} else {
$class = trim(implode(' ', $this->stack) . ($tag != 'p' ? ' ' . $tag : '')) ;
if ($class) {
return '<p class="' . trim($class) .'">';
} else {
return '<p>';
}
}
}


// spans
$spans = array('emphasis', 'strikethrough' , 'sub', 'sup', 'code');
if (in_array($tag, $spans)) {
if ($closing) {
return '</span>';
} else {
$class = trim(implode(' ', $this->stack) . ' ' . $tag);
if ($class) {
return '<span class="' . trim($class) . '">';
} else {
}
return '</span>';
}
}




return '';
}

public function transform($line) {

$line = preg_replace_callback('@<(/)?([a-z\-]+)(\s+.*)?/?>@iU', array($this, 'replace') , $line);

return $line;
}
}


?>
<!DOCTYPE html>
<
html>
<
head>
<
meta charset="utf-8">
<
title>BOOK</title>
<
meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<
meta name="viewport" content="width=device-width, initial-scale=1.0">
<
style>
p.title {
font-size:25px;
}
p.epigraph {
font-style: italic;
font-size:20px;
}
p.text-author {
font-style: italic;
font-size:20px;
}
</style>
</
head>
<
body background="/bg.jpg">
<?php

//echo '<pre>' . htmlspecialchars($html) . '</pre>';
echo $html;

?>
</pre>
</
body>
</
html>


Файл binary.php
<?php

$fb2_file = '44.fb2';
$id = $_GET['id'];
if (empty($id)) {
header("HTTP/1.0 404 Not Found");
die();
}

$handle = fopen($fb2_file, "r");
if ($handle) {

$binaryFound = false;
$binaryContent = '';
while (($line = fgets($handle)) !== false) {

if (!$binaryFound && strstr($line, "<binary") && strstr($line, $id)) {
$binaryFound = true;
}

if ($binaryFound) {
$binaryContent .= $line . "\r\n";
if (strstr($line, "</binary>")) {
break;
}
}
}


fclose($handle);

if ($binaryFound) {
if (preg_match('@<binary([^>]*)>([^<]*)</binary>@is', $binaryContent, $matches)) {

$content_type = 'image/jpeg';
if (preg_match('@content-type="([^"]+)"@i', $matches[1], $matches2)) {
$content_type = $matches2[1];
}

$base64 = $matches[2];
$decoded = base64_decode($base64);
header('Content-Type: ' . $content_type);
header('Content-Length: ' . strlen($decoded));
echo $decoded;
die();
}
}


header("HTTP/1.0 404 Not Found");
die();
}

?>


Скрипт чтения fb2 файлов. В файле index.php в строке 3 указывается путь до читаемого файла (который не хранится в БД, т.е. является внешним), а в строке 73 он запрашивает данные из файла binary.php (выводит картинки из fb2). Т.к. этот функционал реализуется на CMS требуется чтобы все было реализовано в одном файле.И еще надо разбить на страницы выводимый текст (пагинация). Кто в силах помогите пожалуйста.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.