Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> id3_get_tag работает, а id3_set_tag не хочет... 
:(
    Опции темы
AXS
Дата 7.9.2009, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 26.9.2008
Где: РК

Репутация: -1
Всего: -1



Тема такая:
Пользователь загружает mp3 файл, показывается форма с тегами mp3, пользователь дополняет или изменяет теги, нажимает готово и теги записываются в файл.
Просмотр тегов функцией id3_get_tag работает отлично. А вот с удалением или записью проблемы.
Все нужные теги и имя загруженного файла (включая абсолютный путь) передаются методом post. Права на запись выставляю успешно. Получаю версию тегов, удаляю теги и записываю новые. По ответам функций всё проходит гладко, но теги НЕ ЗАПИСЫВАЮТСЯ и НЕ УДАЛЯЮТСЯ.
Код

echo $_POST['uploadedfile'].'<br>';
chmod($_POST['uploadedfile'], 0666);
$data = array(
              "title" => $_POST['title'],
              "artist" => $_POST['artist'],
              "album" => $_POST['album'],
              "year" => $_POST['songyear'],
              "genre" => $_POST['fullgenre'],
              "comment" => $_POST['commentarii'],
              "track" => $_POST['track']/*,
              "composer" => $_POST['composer']*/
             );
$version = id3_get_version( $_POST['uploadedfile'] );
if ($version & ID3_V2) {
    $vers = ID3_V2;
    echo '2<br>';
}elseif ($version & ID3_V1_1) {
    $vers = ID3_V1_1;
    echo '1.1<br>';
}else{
    $vers = ID3_V1_0;
    echo '1.0<br>';
};
$res = id3_remove_tag( $_POST['uploadedfile'], $vers );
if ($res === true) {
    echo "Tag succesfully removed<br>";
}
$res = id3_set_tag( $_POST['uploadedfile'], $data, $vers );
if ($res === true) {
    echo "Tag succesfully updated<br>";
$newtag = id3_get_tag($_POST['uploadedfile']);
echo '<hr><br>DATA<br>';
print_r ($data);
echo '<hr><br>POST<br>';
print_r ($_POST);
echo '<hr><br>NEWTAG<br>';
print_r ($newtag);
echo '<hr>';
};

Результат:
Код

/var/www/clnt.bc/bc-files/uploads/mihey_-_tuda.mp3
1.1
Tag succesfully removed
Tag succesfully updated
---------------------------------------------------------------------------------------------
DATA
Array ( 
[title] => Туда 
[artist] => Михей, 
[album] => NULL 
[year] => 2004 
[genre] => 13 
[comment] => Тестируем комментарии... 
[track] => 22 
) 
---------------------------------------------------------------------------------------------
POST
Array ( 
[title] => Туда 
[composer] => Неизвестен 
[artist] => Михей, 
[album] => NULL 
[track] => 22 
[fullgenre] => 13 
[songyear] => 2004 
[commentarii] => Тестируем комментарии... 
[useraction] => addfile 
[genre] => 
[uploadedfile] => /var/www/clnt.bc/bc-files/uploads/mihey_-_tuda.mp3 
) 
---------------------------------------------------------------------------------------------
NEWTAG
Array ( 
[title] => ���� 
[album] => NULL 
[artist] => �����, 
)
---------------------------------------------------------------------------------------------

--------------------
<><><> AXS - Live Organizer v1.0  <><><> 0_o
PM MAIL WWW ICQ Skype GTalk   Вверх
Ипатьев
Дата 7.9.2009, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



если вопросы к функции id3_set_tag, то при чем здесь форма и метод ПОСТ?
PM MAIL   Вверх
AXS
Дата 8.9.2009, 07:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 26.9.2008
Где: РК

Репутация: -1
Всего: -1



Цитата(Ипатьев @ 7.9.2009,  14:42)
если вопросы к функции id3_set_tag, то при чем здесь форма и метод ПОСТ?

Интересно, что бы Вы ответили, если бы я тупо написал: "Чё то id3_set_tag не пашет..."?.   smile 
Я описал всю ситуацию, чтобы не было лишнего трёпа типа "А может парамеры не доходят..." или "А ты вообще подключил модуль id3?"

PS: Жаль что Вы мне ничем больше не можете помочь...
--------------------
<><><> AXS - Live Organizer v1.0  <><><> 0_o
PM MAIL WWW ICQ Skype GTalk   Вверх
NewDima
Дата 8.9.2009, 07:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



а не кажется, что с кодировкой проблемы?
PM ICQ   Вверх
Ипатьев
Дата 8.9.2009, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Цитата(AXS @  8.9.2009,  07:11 Найти цитируемый пост)
Интересно, что бы Вы ответили, если бы я тупо написал: "Чё то id3_set_tag не пашет..."?.

я бы попросил более детального описания.

Цитата(AXS @  8.9.2009,  07:11 Найти цитируемый пост)
Я описал всю ситуацию, чтобы не было лишнего трёпа типа "А может парамеры не доходят..." или "А ты вообще подключил модуль id3?"

это не лишний треп.
это вопросы, которые программист должен устранить перед тем, как писать на форум. 
а оставив в описании проблемы этап передачи данных на сервер, вы как раз наоборот - оставляете эти вопросы.
если вопрос про id3_set_tag, то иллюстрирующий код должен содержать только id3_set_tag.
причем в первую очередь это нужно не болтунам с форума, а самому программисту.

Цитата(AXS @  8.9.2009,  07:11 Найти цитируемый пост)
PS: Жаль что Вы мне ничем больше не можете помочь... 

ничего страшного. не помог вам - помогу кому-то еще. в жизни не бывает ничего идеального.
тем более, что профессия программиста имеет такую неприятную сторону, что часто, по очевидным объективным причинам, всё равно никто посторонний ошибку не найдет. решение проблем на форуме - редкое исключение.
PM MAIL   Вверх
AXS
Дата 8.9.2009, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 26.9.2008
Где: РК

Репутация: -1
Всего: -1



Цитата(NewDima @ 8.9.2009,  07:28)
а не кажется, что с кодировкой проблемы?

То что в последних строчках - это исходные теги файла (в CP866 или что то типа того). Я, как видно по коду, пытаюсь стереть старые теги и записать новые в UTF8.*
Но если вникнуть в код, можно заметить что теги не стираются, а остаются старыми.

* Так делает программа под линукс - EasyTeg. Я ею все mp3 на компе перелопачиваю - теги в win1251 линукс кракозябрами кажет.

Это сообщение отредактировал(а) AXS - 8.9.2009, 08:25
--------------------
<><><> AXS - Live Organizer v1.0  <><><> 0_o
PM MAIL WWW ICQ Skype GTalk   Вверх
AXS
Дата 8.9.2009, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 26.9.2008
Где: РК

Репутация: -1
Всего: -1



Цитата(Ипатьев @ 8.9.2009,  08:19)
оставив в описании проблемы этап передачи данных на сервер, вы как раз наоборот - оставляете эти вопросы.
если вопрос про id3_set_tag, то иллюстрирующий код должен содержать только id3_set_tag.

Мне кажется Вы плохо разглядели код, который я предоставил.
Более подробно special for you:
Код

echo $_POST['uploadedfile'].'<br>';
chmod($_POST['uploadedfile'], 0666); // Подготовка прав доступа для записи тегов
$data = array(                                     // Заполнение массива для записи тегов
              "title" => $_POST['title'],
              "artist" => $_POST['artist'],
              "album" => $_POST['album'],
              "year" => $_POST['songyear'],
              "genre" => $_POST['fullgenre'],
              "comment" => $_POST['commentarii'],
              "track" => $_POST['track']/*,
              "composer" => $_POST['composer']*/
             );                                             // Массив заполнен
$version = id3_get_version( $_POST['uploadedfile'] ); // Узнаём версии имеющихся тегов, чтоб знать в какой версии писать.
if ($version & ID3_V2) {         // Находим наиболее новую версию имеющихся тегов
    $vers = ID3_V2;
    echo '2<br>';
}elseif ($version & ID3_V1_1) {
    $vers = ID3_V1_1;
    echo '1.1<br>';
}else{
    $vers = ID3_V1_0;
    echo '1.0<br>';
};
$res = id3_remove_tag( $_POST['uploadedfile'], $vers ); // Удаляем теги и получаем результат операции
if ($res === true) {  // Если функция вернула истину, пишем, что тег удалён
    echo "Tag succesfully removed<br>";
}
$res = id3_set_tag( $_POST['uploadedfile'], $data, $vers ); // Пишем массив с новыми тегами в только что очищенную секцию и получаем результат операции
if ($res === true) {  // Если функция вернула истину, пишем, что тег записан
    echo "Tag succesfully updated<br>";

// Далее  идёт код, который по моему мнению должен был помочь форумчанам найти проблему
// Результат этого кода я предоставил в первом посте
$newtag = id3_get_tag($_POST['uploadedfile']); // Читаем только что записанные теги,
echo '<hr><br>DATA<br>';
print_r ($data); // Выводим массив с тегами для записи в файл чтобы убедиться, что массив нормально заполнился
echo '<hr><br>POST<br>';
print_r ($_POST); // Выводим то что было передано через POST (теги для записи и имя файла)  принято
echo '<hr><br>NEWTAG<br>';
print_r ($newtag);// Выводим теги из файла после проделанной операции, чтобы убедиться, что ни хрена не записалось 
echo '<hr>';
};

Как видно здесь нету "этапа передачи данных на сервер"...
--------------------
<><><> AXS - Live Organizer v1.0  <><><> 0_o
PM MAIL WWW ICQ Skype GTalk   Вверх
Ипатьев
Дата 8.9.2009, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Ну, судя по отладочным данным, дело, действительно, не в передаче данных.
Но. Тем не менее. В коде очень много лишнего.
Судя по вашим ответам, вы гораздо глубже в теме, чем остальные посетители. К примеру, никто из тех, кому вы задаете вопрос, не может знать какие-то там исходные теги. 
То есть, вы на правильном пути. При этом проблема у вас в методологии.
В коде очень много лишнего. И нет нужного. Есть выставление прав, но нет проверки - выставились ли они. Непонятно, настроен ли РНР выводить ошибки. Плюс, опять же, все свалено в кучу. Чтобы проверить функцию id3_remove_tag, не нужно так много кода. Вместо него надо совершать больше действий, шевелиться, пробовать разные варианты.
Опять же, нет чтения тегов перед записью. Все это необходимые элементы отладки. 

На мой взгляд, надо написать код буквально из двух строчек, который будет работать с имеющимся файлом, и в котором будет только id3_remove_tag. И работать только с ним.
При этом подсовывать этой функции пустой файл, испорченный файл, файл, запрещенный для записи и так далее. 

Отладка - дело серьезное и муторное. Но если подходить к ней грамотно, то вполне можно добиться успеха.
PM MAIL   Вверх
AXS
Дата 8.9.2009, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 26.9.2008
Где: РК

Репутация: -1
Всего: -1



Цитата(Ипатьев @ 8.9.2009,  11:03)
1) Есть выставление прав, но нет проверки - выставились ли они. 

2) Непонятно, настроен ли РНР выводить ошибки. 

3) нет чтения тегов перед записью.

1) Проверял ручками - выставляются
2) Да, настроен
3) Теги читаются, выводятся в форму, редактируются пользователем и отправляются POST'ом в этот самый код, который мы рассматриваем. Я об этом, кстати писал в первом посте 
Код

Пользователь загружает mp3 файл, показывается форма с тегами mp3, пользователь дополняет или изменяет теги,


Спасибо за советы по отладке. Я правда подсовывал скрипту немало файлов... Весь тот мусор в коде как раз и возник в результате отладки, чтобы сразу видеть что и как прошло. Но у меня такое ощущение, что эти две функции вообще не работают smile
--------------------
<><><> AXS - Live Organizer v1.0  <><><> 0_o
PM MAIL WWW ICQ Skype GTalk   Вверх
Ипатьев
Дата 8.9.2009, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Цитата(AXS @  8.9.2009,  11:57 Найти цитируемый пост)
Теги читаются, выводятся в форму

Очень странно.
Почему в форму теги выводятся нормально, а в отладочный вывод - криво.
PM MAIL   Вверх
AXS
Дата 8.9.2009, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 26.9.2008
Где: РК

Репутация: -1
Всего: -1



Цитата(Ипатьев @ 8.9.2009,  12:01)
Цитата(AXS @  8.9.2009,  11:57 Найти цитируемый пост)
Теги читаются, выводятся в форму

Очень странно.
Почему в форму теги выводятся нормально, а в отладочный вывод - криво.

Ах да. Забыл сказать. Я читаю теги, определяю их кодировку, перекодирую (если надо) в utf8 и вывожу в форму.
А тут я схалтурил - просто вывел, чтобы было видно переписались ли они.
--------------------
<><><> AXS - Live Organizer v1.0  <><><> 0_o
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0532 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.