У меня проблема с неэтериализацией сериализованных данных.PHP unserialize сериализованные данные
Данные сериализуются и сохраняются в базе данных.
Эти данные содержат загруженный URL-адрес .csv, который я хочу вернуть fgetcsv.
fgetcsv ожидает массив, и теперь дана строка, поэтому мне нужно неэтериализовать данные, но это дает мне ошибки.
Я нашел это онлайн http://davidwalsh.name/php-serialize-unserialize-issues, но это не работает. Так что я надеюсь, что кто-то может сказать мне, где я ошибся:
Здесь ошибка:
Notice: unserialize() [function.unserialize]: Error at offset 0 of 1 bytes in /xxx/public_html/multi-csv-upload.php on line 163
Я обнаружил, что это означает, что есть определенные символы в сериализованных данных, что делает файл коррумпированного после unserialization (",',:,;)
Строка 163:
jj_readcsv(unserialize ($value[0]),true);` // this reads the url of the uploaded csv and tries to open it.
Вот код, который делает данные сериализовать:
update_post_meta($post_id, 'mcu_csv', serialize($mcu_csv));
Это WordPress
Вот выход:
echo '<pre>';
print_r(unserialize($value));
echo '</pre>';
Array ( [0] => http://www.domain.country/xxx/uploads/2014/09/test5.csv )
Как я вижу, что там не должно быть ничего плохого здесь.
У кого-нибудь есть идея, как я могу неэриализовать это, чтобы я мог использовать его? Вот что я сделал ГНФАР ...
public function render_meta_box_content($post)
{
// Add an nonce field so we can check for it later.
wp_nonce_field('mcu_inner_custom_box', 'mcu_inner_custom_box_nonce');
// Use get_post_meta to retrieve an existing value from the database.
$value = get_post_meta($post->ID, 'mcu_images', true);
echo '<pre>';
print_r(unserialize($value));
echo '</pre>';
ob_start();
jj_readcsv(unserialize ($value[0]),true);
$link = ob_get_contents();
ob_end_clean();
$editor_id = 'my_uploaded_csv';
wp_editor($link, $editor_id);
$metabox_content = '<div id="mcu_images"></div><input type="button" onClick="addRow()" value="Voeg CSV toe" class="button" />';
echo $metabox_content;
$images = unserialize($value);
$script = "<script>
itemsCount= 0;";
if (!empty($images))
{
foreach ($images as $image)
{
$script.="addRow('{$image}');";
}
}
$script .="</script>";
echo $script;
}
function enqueue_scripts($hook)
{
if ('post.php' != $hook && 'post-edit.php' != $hook && 'post-new.php' != $hook)
return;
wp_enqueue_script('mcu_script', plugin_dir_url(__FILE__) . 'mcu_script.js', array('jquery'));
}
Спасибо. Для объяснения и это сработало. FYI массив будет заполнен большим количеством URL-адресов csv для файлов. – Interactive
@Interactive Glad я мог бы помочь. И да, я ожидал, что есть причина для использования массивов, но на всякий случай добавлен более поздний код. – Steve