LINUX.ORG.RU

Очистить полученную строку из БД от «мусора».


0

1

Вообщем суть такова. В бд хранятся файлы в очень «грязном» формате.

a:1:{i:0;a:5:{s:13:"FileExtension";s:3:"png";s:8:"FileSize";i:245652;s:14:"FileResolution";s:1:"x";s:12:"FileMimeType";s:9:"image/png";s:8:"FileName";s:16:"1.png";}}
Реально без прикручивания тяжелого скрипта прородителя для которого эта строка и хранится в БД, забрать только название png файла? Те как очистить всё средствами php/mysql и получить в итоге чистую строку «1.png»? Длинна каждый раз меняется, название файлов рандомно.

Ответ на: комментарий от r_asian

имхо лучше в json сериализовывать

anonymous
()
Ответ на: комментарий от r_asian

Я что-то как-то не осилил.

Максимальный этап познания, лол. В итоге:

 array ( 0 => array ( 'FileExtension' => 'png', 'FileSize' => 245652, 'FileResolution' => 'x', 'FileMimeType' => 'image/png', 'FileName' => '1.png', ), ) 

По сути как-то переменные можно раздать?

a:1:{i:0;a:5:{s:13:"FileExtension";s:3:"png";s:8:"FileSize";i:245652;s:14:"FileResolution";s:1:"x";s:12:"FileMimeType";s:9:"image/png";s:8:"FileName";s:16:"1.png";}}

a это количество элементов на сколько я понял? зачем тут ещё одна a в самом начале?

По сути мне нужен s16 если я правильно понял структуру. В сети одна инфа как передать/создать...

VictimOfLoveToLinux
() автор топика
Ответ на: комментарий от VictimOfLoveToLinux

у тебя там по-идее должно быть s:5 а не s:16, данные битые?

<pre>
<?php
$str = 'a:1:{i:0;a:5:{s:13:"FileExtension";s:3:"png";s:8:"FileSize";i:245652;'.
       's:14:"FileResolution";s:1:"x";s:12:"FileMimeType";s:9:"image/png";'.
       's:8:"FileName";s:5:"1.png";}}';
$data = unserialize($str);
var_dump($data);
echo($data[0]['FileName']);
?>
</pre>
anonymous
()
Ответ на: комментарий от anonymous

а с покалеченной строкой можно и на регэкспах

<pre>
<?php
$str = 'a:1:{i:0;a:5:{s:13:"FileExtension";s:3:"png";s:8:"FileSize";i:245652;'.
       's:14:"FileResolution";s:1:"x";s:12:"FileMimeType";s:9:"image/png";'.
       's:8:"FileName";s:13666:"1.png";}}';
$subject = $str;
$pattern = '/"FileName";s:\d+:"(.*?)";/';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);
print_r($matches);
$filename = $matches[1][0];
echo $filename;
?>
</pre>

anonymous
()
Ответ на: комментарий от anonymous

Получил обратно: bool(false)

данные битые?

Посмотрел, все так в таблице хранятся, это плохо?

VictimOfLoveToLinux
() автор топика
Ответ на: комментарий от anonymous

Нет, всё равно хрень какая-то.

Вроде как обрадовался распрасил а там лишний? кусок:

[Array ( [0] => Array ( [0] => "FileName";s:16:"1.png"; [1] => 139 ) [1] => Array ( [0] => 1.png [1] => 156 ) ) 1.png]
По сути если я правильно понял скрипт данный аноном то должно показываться только как раз s16 те 1.png а он мне ещё тележку и арраев даёт.

VictimOfLoveToLinux
() автор топика
Ответ на: комментарий от VictimOfLoveToLinux

Мб проблема в том КАК я получаю этот массив? Да вроде всё верно.

$file = mysql_query("SELECT files FROM Messages WHERE MessageID ORDER BY MessageDate DESC LIMIT 0,1", $podkl); 


while ($row = mysql_fetch_row($file)) 

{ 
$session_data = $row['0'];
}

VictimOfLoveToLinux
() автор топика
Ответ на: комментарий от VictimOfLoveToLinux

не?

<ul>
<?php

while ($row = mysql_fetch_row($file)) { 
    $session_data = $row['0'];
    $pattern = '/"FileName";s:\d+:"(.*?)";/';
    preg_match($pattern, $session_data, $matches);
    @$filename = $matches[1];
    echo "<li>".$filename."</li>\n";
}

?>
</ul>

anonymous
()
Ответ на: комментарий от anonymous

Но спасибо, конечно же буду использовать твой код. У меня там лютая машина смерти вышла. С посимвольным удалением лишних строк.

VictimOfLoveToLinux
() автор топика
Ответ на: комментарий от anonymous

Спасибо ещё раз бро, ну да ладно, хоть разобрался как это работает.

Я тут понаглею, а если он возвращает 0? Те a:0:{} пустая запись, реально сделать чтобы переменная $filename выводила определённую пикчу для таких случаев?

Это надо к if else копать и делать проверку ещё на этапе row?

VictimOfLoveToLinux
() автор топика
Ответ на: комментарий от anonymous

Спасибо ещё раз бро, ну да ладно, хоть разобрался как это работает.

Я тут понаглею, а если он возвращает 0? Те a:0:{} пустая запись, реально сделать чтобы переменная $filename выводила определённую пикчу для таких случаев?

Это надо к if else копать и делать проверку ещё на этапе row?

---------- Можно даже упростить вопрос, реально ли сделать для определенной директории свою 404 ошибку? Те сейчас в хтаче ErrorDocument 404 /404.png на весь сайт а мне например нужно на папку где лежат пикчи эти. ----------

Отвечаю сам себе же, можно, закинуть хтач в эту папку и готово :3

Всем спасибо ещё раз.

VictimOfLoveToLinux
() автор топика
Ответ на: комментарий от VictimOfLoveToLinux

можно даже без .htaccess'а обойтись, кинуть в директорию с картинками index.html содержащий что-нибудь типа «<b>Forbidden!<br/>Доступ запрещен!</b>» и оно даже с nginx, lighttpd и прочими работать будет

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.