извлечение данных f2 на php

Статус
В этой теме нельзя размещать новые ответы.

Глеб

Aller2TeaM
Пользователь
23 Июн 2012
41
7
8
29
vk.com
Ребят, помогите. Делается php-шка электронной библиотеки. Выбрал вариант с fb2 так как в этом случае не требуется ручной ввод информации о книге. Нужно вытащить данные под тегом (например "first-name"). Что я делаю не так?

PHP:
<html>
<head>
<title>Результат загрузки</title>
</head>
<body>
<?php
//Проверка на размер файла
if($_FILES["filename"]["size"] > 1024*10*1024)
{
echo ("Размер файла превышает 10 мегабайт");
exit;
}
//Проверка на формат файла
if(preg_match('/(\.fb2)$/i',$_FILES["filename"]["name"]))
{
echo ("Загрузка ");
}
else
{
echo ("Разрешена загрузка только файлов fb2 формата!");
}
// Проверяем загружен ли файл
if(is_uploaded_file($_FILES["filename"]["tmp_name"]))
{
// Перемещаем файл если загружен
move_uploaded_file($_FILES["filename"]["tmp_name"], "/var/www/books-library/".$_FILES["filename"]["name"]);
echo ("завершена");
// Вытаскиваем данные под тегом "first-name"
$filename = ($_FILES["name"]);
$book = new SimpleXMLElement_load_file($filename); {
echo $book->FictionBook->description->{'title-info'}->author->{'first-name'}; }
} else {
echo("Ошибка загрузки файла");
}
?>
</body>
</html>
 

Электрон

Большой Электрон
Пользователь
30 Мар 2012
504
230
79
28
PHP:
<html>
<head>
<title>Результат загрузки</title>
</head>
<body>
<?php
//Проверка на размер файла
if($_FILES["filename"]["size"] > 1024*10*1024)
{
echo ("Размер файла превышает 10 мегабайт");
exit;
}
//Проверка на формат файла
if(preg_match('/(\.fb2)$/i',$_FILES["filename"]["name"]))
{
echo ("Загрузка ");
}
else
{
echo ("Разрешена загрузка только файлов fb2 формата!");
}
// Проверяем загружен ли файл
if(is_uploaded_file($_FILES["filename"]["tmp_name"]))
{
// Перемещаем файл если загружен
move_uploaded_file($_FILES["filename"]["tmp_name"], "/var/www/books-library/".$_FILES["filename"]["name"]);
echo ("завершена");
// Вытаскиваем данные под тегом "first-name"
$filename = ($_FILES["name"]);
$book =simplexml_load_file($filename); 
echo $book->description->{'title-info'}->author->{'first-name'}; 
} else {
echo("Ошибка загрузки файла");
}
?>
</body>
</html>

SimpleXMLElement_load_file
Класса у меня небыло, поэтому я юзал simplexml_load_file
Не нужен
 
  • Like
Реакции: Глеб

Rody66

В Дзэне
« PW Мастер II »
3 Апр 2013
119
363
63
30
rodysoft.ru
Если тег уникальный, то можно вообще без xml обойтись:
PHP:
function GetXMLContentByTag($FileName, $tag) {
$Content=file_get_contents($FileName);
$a=strpos($Content, '<'.$tag.'>');
if($a==false) return;
$b=strpos($Content, '<'.$tag.'/>');
$Result=substr($Content, $a+strlen($tag)+2, $b-$a-strlen($tag));
return $Result;
}
Юзается так:
PHP:
echo GetXMLContentByTag($filename, "first-name");
--- добавлено: 16 май 2013 в 22:30 ---
Или с regex еще проще.
 

Глеб

Aller2TeaM
Пользователь
23 Июн 2012
41
7
8
29
vk.com
Попробуй
PHP:
echo $book->description->{'title-info'}->author->{'first-name'}

PHP:
<html>
<head>
<title>Результат загрузки</title>
</head>
<body>
<?php
//Проверка на размер файла
if($_FILES["filename"]["size"] > 1024*10*1024)
{
echo ("Размер файла превышает 10 мегабайт");
exit;
}
//Проверка на формат файла
if(preg_match('/(\.fb2)$/i',$_FILES["filename"]["name"]))
{
echo ("Загрузка ");
}
else
{
echo ("Разрешена загрузка только файлов fb2 формата!");
}
// Проверяем загружен ли файл
if(is_uploaded_file($_FILES["filename"]["tmp_name"]))
{
// Перемещаем файл если загружен
move_uploaded_file($_FILES["filename"]["tmp_name"], "/var/www/books-library/".$_FILES["filename"]["name"]);
echo ("завершена");
// Вытаскиваем данные под тегом "first-name"
$filename = ($_FILES["name"]);
$book =simplexml_load_file($filename);
echo $book->description->{'title-info'}->author->{'first-name'};
} else {
echo("Ошибка загрузки файла");
}
?>
</body>
</html>


Класса у меня небыло, поэтому я юзал simplexml_load_file

Не нужен


Загрузка завершена
=(
Если я правильно понял, то у вас заработало.
Но в принципе, возможно ли схожим образом вместо отображения, присвоить переменной результат, и отправить результат в MySQL базу?

update.
PHP:
echo ($_FILES["filename"]);
выдаёт Array

Кажется я начинаю путаться...
 

Глеб

Aller2TeaM
Пользователь
23 Июн 2012
41
7
8
29
vk.com
Люди, дубль два - и тот не работает :(
тут все файлы которые используются
а так...

include.php:
PHP:
<?php
    $xmlstr = <<<XML
    include $_FILES
XML;
?>

upload.html:

HTML:
<html>
<head>
  <title>Форма для загрузки книг</title>
</head>
<body>
      <h2><p><b> Форма для загрузки книг </b></p></h2>
      <form action="upload.php" method="post" enctype="multipart/form-data">
      <input type="file" name="filename"><br>
      <input type="submit" value="Загрузить"><br>
      <h2><p><b> Внимание, загрузке подлежат только книги формата FB2, размером не более 22 мегабайт </b></p></h2>
      </form>
</body>
</html>

upload.php:

PHP:
<html>
<head>
<title>Результат загрузки</title>
</head>
<body>
<?php
//Проверка на размер файла
if($_FILES["filename"]["size"] > 1024*10*1024)
{
echo ("Размер файла превышает 10 мегабайт");
exit;
}
//Проверка на формат файла
if(preg_match('/(\.fb2)$/i',$_FILES["filename"]["name"]))
{
echo ("Загрузка ");
}
else
{
echo ("Разрешена загрузка только файлов fb2 формата!");
}
// Проверяем загружен ли файл
if(is_uploaded_file($_FILES["filename"]["tmp_name"]))
{
// Перемещаем файл если загружен
move_uploaded_file($_FILES["filename"]["tmp_name"], "/var/www/books-library/".$_FILES["filename"]["name"]);
echo ("завершена");
// Вытаскиваем данные под тегом "first-name"
//$filename = ($_FILES["filename"]["name"]);
//echo ($_FILES["filename"]);
include 'include.php';
$book =simplexml_load_file($xmlstr);
$fname = $book->description->{'title-info'}->author->{'first-name'};
echo $fname;
} else {
echo("Ошибка загрузки файла");
}
?>
</body>
</html>

и кусочек fb2:

XML:
<?xml version="1.0" encoding="utf-8"?>
<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink">
  <description>
    <title-info>
      <genre>sf_action</genre>
      <author>
        <first-name>Сергей</first-name>
        <middle-name>Сергеевич</middle-name>
        <last-name>Тармашев</last-name>
        <home-page>http://tarmashev.com/</home-page>
      </author>
      <book-title>Древний. Час воздаяния</book-title>
 

Вложения

  • books-library.zip
    441,4 KB · Просмотры: 3

Rody66

В Дзэне
« PW Мастер II »
3 Апр 2013
119
363
63
30
rodysoft.ru
Пофиксил твой скрипт, вот рабочий вариант:
PHP:
<?php
//Проверка на размер файла
if($_FILES["filename"]["size"] > 1024*10*1024)
{
    echo ("Размер файла превышает 10 мегабайт");
    exit;
}
//Проверка на формат файла
if(preg_match('/(\.fb2)$/i',$_FILES["filename"]["name"])) {
    echo ("Загрузка ");
} else {
    echo ("Разрешена загрузка только файлов fb2 формата!");
}
// Проверяем загружен ли файл
if(is_uploaded_file($_FILES["filename"]["tmp_name"])) {
    // Перемещаем файл если загружен - Загрузка в папку books
    $filename = "books/" . $_FILES["filename"]["name"];
    move_uploaded_file($_FILES["filename"]["tmp_name"], $filename);
    echo ("завершена <br/>");
    $book =simplexml_load_file($filename);
    $fname = $book->description->{'title-info'}->author->{'first-name'};
    echo $fname;
} else {
    echo("Ошибка загрузки файла");
}
?>
Инклуд вообще не нужен.
--- добавлено: 17 май 2013 в 22:08 ---
Не забудь в папке со скриптом создать папку books.
 
  • Like
Реакции: Глеб
Статус
В этой теме нельзя размещать новые ответы.

Пользователи онлайн

Сейчас на форуме нет ни одного пользователя.

Последние ресурсы

Статистика форума

Темы
3.846
Сообщения
21.243
Пользователи
7.725
Новый пользователь
a707400208