Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 08.05.2017
Сообщений: 3
1

Объединить два скрипта и вывести постранично

08.05.2017, 16:50. Показов 612. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Файл index.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
<?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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?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 требуется чтобы все было реализовано в одном файле.И еще надо разбить на страницы выводимый текст (пагинация). Кто в силах помогите пожалуйста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.05.2017, 16:50
Ответы с готовыми решениями:

Правильно объединить два скрипта
Привет всем. Делаю я поиск пользователей с условием. Сам поиск я написал вот он $query = 'SELECT...

Не могу объединить два скрипта
Привет всем, хочу сделать мультиселект у меня есть выпадающие списки вот скрипт &lt;section...

Подскажите как объединить два скрипта
Нужно сделать прокрутку фото в галерее, подключил скрипт ( Sky jQuery Touch Carousel v1.0.2 ), но...

Подскажите, как объединить два скрипта
уважаемые жители топика,подскажите не смышлёнышу... как соеденить во едино два скрипта ? задача...

1
313 / 312 / 221
Регистрация: 11.07.2015
Сообщений: 1,107
09.05.2017, 19:26 2
Более правильно отдавать клиенту книгу в формате pdf
0
09.05.2017, 19:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.05.2017, 19:26
Помогаю со студенческими работами здесь

Как объединить два скрипта в один
Два скрипта: /*первый*/ $(document).ready(function() { url = window.location.href;...

Объединить два PHP скрипта из одного Ларавель-проекта, в один работающий скрипт
Задача: Объединить два PHP скрипта из одного Ларавель-проекта, в один работающий скрипт. Ларавель...

Вывести таблицу постранично
Такой вопрос, как осуществить, чтобы таблица, заполняясь, например, на 50 строк, переносилась на...

Два провайдера, два роутера (с NAT), как объединить всё это?
Есть два роутера, один с вайфаем, получает инет по выделенке (витая пара), другой ADSL. Инет в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru