public function file() { $fileID = array_keys($_GET); $fileID = str_replace('files/', '', $fileID[0]); $fileInfo = $this->_files->getFileInfo($fileID); if (empty($fileInfo)) { header("{$_SERVER['SERVER_PROTOCOL']} 404 Not Found"); $data['title'] = '404'; $data['error'] = "Страница не найдена."; View::render('Error/404'); die; } $data['title'] = $fileInfo['file_name']; $data['fileinfo'] = $fileInfo; if ($data['fileinfo']['file_type'] == 'image/jpg' || $data['fileinfo']['file_type'] == 'image/gif' || $data['fileinfo']['file_type'] == 'image/png') { $data['imageinfo'] = getimagesize($_SERVER['DOCUMENT_ROOT'] . '/uploads/' . $data['fileinfo']['server_name']); } if ($data['fileinfo']['file_type'] == 'image/jpg' || $data['fileinfo']['file_type'] == 'image/tiff') { $data['imageinfo']['saved'] = exif_read_data($_SERVER['DOCUMENT_ROOT'] . '/uploads/' . $data['fileinfo']['server_name']); } $fileType = array_shift(explode('/', $data['fileinfo']['file_type'])); if ($fileType == 'video' || $fileType == 'audio') { $getID3 = new GetId3(); $data['mediainfo'] = $getID3->setEncoding('UTF-8')->analyze($_SERVER['DOCUMENT_ROOT'] . '/uploads/' . $data['fileinfo']['server_name']); } $data['comments'] = $this->_files->getAllComments($fileID); $data['token'] = $this->makeToken(); View::renderTemplate('header', $data); View::render('files/file', $data); View::renderTemplate('footer', $data); }
/** * @return bool */ public function WriteTags() { if (empty($this->filename)) { $this->errors[] = 'filename is undefined in GetId3_writetags'; return false; } elseif (!file_exists($this->filename)) { $this->errors[] = 'filename set to non-existant file "' . $this->filename . '" in GetId3_writetags'; return false; } if (!is_array($this->tagformats)) { $this->errors[] = 'tagformats must be an array in GetId3_writetags'; return false; } $TagFormatsToRemove = array(); if (filesize($this->filename) == 0) { // empty file special case - allow any tag format, don't check existing format // could be useful if you want to generate tag data for a non-existant file $this->ThisFileInfo = array('fileformat' => ''); $AllowedTagFormats = array('id3v1', 'id3v2.2', 'id3v2.3', 'id3v2.4', 'ape', 'lyrics3'); } else { $getID3 = new GetId3Core(); $getID3->setEncoding($this->tag_encoding); $this->ThisFileInfo = $getID3->analyze($this->filename); // check for what file types are allowed on this fileformat switch (isset($this->ThisFileInfo['fileformat']) ? $this->ThisFileInfo['fileformat'] : '') { case 'mp3': case 'mp2': case 'mp1': case 'riff': // maybe not officially, but people do it anyway $AllowedTagFormats = array('id3v1', 'id3v2.2', 'id3v2.3', 'id3v2.4', 'ape', 'lyrics3'); break; case 'mpc': $AllowedTagFormats = array('ape'); break; case 'flac': $AllowedTagFormats = array('metaflac'); break; case 'real': $AllowedTagFormats = array('real'); break; case 'ogg': switch (isset($this->ThisFileInfo['audio']['dataformat']) ? $this->ThisFileInfo['audio']['dataformat'] : '') { case 'flac': //$AllowedTagFormats = array('metaflac'); $this->errors[] = 'metaflac is not (yet) compatible with OggFLAC files'; return false; break; case 'vorbis': $AllowedTagFormats = array('vorbiscomment'); break; default: $this->errors[] = 'metaflac is not (yet) compatible with Ogg files other than OggVorbis'; return false; break; } break; default: $AllowedTagFormats = array(); break; } foreach ($this->tagformats as $requested_tag_format) { if (!in_array($requested_tag_format, $AllowedTagFormats)) { $errormessage = 'Tag format "' . $requested_tag_format . '" is not allowed on "' . (isset($this->ThisFileInfo['fileformat']) ? $this->ThisFileInfo['fileformat'] : ''); $errormessage .= isset($this->ThisFileInfo['audio']['dataformat']) ? '.' . $this->ThisFileInfo['audio']['dataformat'] : ''; $errormessage .= '" files'; $this->errors[] = $errormessage; return false; } } // List of other tag formats, removed if requested if ($this->remove_other_tags) { foreach ($AllowedTagFormats as $AllowedTagFormat) { switch ($AllowedTagFormat) { case 'id3v2.2': case 'id3v2.3': case 'id3v2.4': if (!in_array('id3v2', $TagFormatsToRemove) && !in_array('id3v2.2', $this->tagformats) && !in_array('id3v2.3', $this->tagformats) && !in_array('id3v2.4', $this->tagformats)) { $TagFormatsToRemove[] = 'id3v2'; } break; default: if (!in_array($AllowedTagFormat, $this->tagformats)) { $TagFormatsToRemove[] = $AllowedTagFormat; } break; } } } } $WritingFilesToInclude = array_merge($this->tagformats, $TagFormatsToRemove); // Check for required include files and include them foreach ($WritingFilesToInclude as $tagformat) { switch ($tagformat) { case 'ape': $GETID3_ERRORARRAY =& $this->errors; if (!class_exists('Helpers\\GetId3\\Write\\Apetag')) { return false; } break; case 'id3v1': case 'lyrics3': case 'vorbiscomment': case 'metaflac': case 'real': $GETID3_ERRORARRAY =& $this->errors; if (!class_exists('Helpers\\GetId3\\Write\\' . ucfirst($tagformat))) { return false; } break; case 'id3v2.2': case 'id3v2.3': case 'id3v2.4': case 'id3v2': $GETID3_ERRORARRAY =& $this->errors; if (!class_exists('Helpers\\GetId3\\Write\\Id3v2')) { return false; } break; default: $this->errors[] = 'unknown tag format "' . $tagformat . '" in $tagformats in WriteTags()'; return false; break; } } // Validation of supplied data if (!is_array($this->tag_data)) { $this->errors[] = '$this->tag_data is not an array in WriteTags()'; return false; } // convert supplied data array keys to upper case, if they're not already foreach ($this->tag_data as $tag_key => $tag_array) { if (strtoupper($tag_key) !== $tag_key) { $this->tag_data[strtoupper($tag_key)] = $this->tag_data[$tag_key]; unset($this->tag_data[$tag_key]); } } // convert source data array keys to upper case, if they're not already if (!empty($this->ThisFileInfo['tags'])) { foreach ($this->ThisFileInfo['tags'] as $tag_format => $tag_data_array) { foreach ($tag_data_array as $tag_key => $tag_array) { if (strtoupper($tag_key) !== $tag_key) { $this->ThisFileInfo['tags'][$tag_format][strtoupper($tag_key)] = $this->ThisFileInfo['tags'][$tag_format][$tag_key]; unset($this->ThisFileInfo['tags'][$tag_format][$tag_key]); } } } } // Convert "TRACK" to "TRACKNUMBER" (if needed) for compatability with all formats if (isset($this->tag_data['TRACK']) && !isset($this->tag_data['TRACKNUMBER'])) { $this->tag_data['TRACKNUMBER'] = $this->tag_data['TRACK']; unset($this->tag_data['TRACK']); } // Remove all other tag formats, if requested if ($this->remove_other_tags) { $this->DeleteTags($TagFormatsToRemove); } // Write data for each tag format foreach ($this->tagformats as $tagformat) { $success = false; // overridden if tag writing is successful switch ($tagformat) { case 'ape': $ape_writer = new Apetag(); if (($ape_writer->tag_data = $this->FormatDataForAPE()) !== false) { $ape_writer->filename = $this->filename; if (($success = $ape_writer->WriteAPEtag()) === false) { $this->errors[] = 'WriteAPEtag() failed with message(s):<pre><ul><li>' . str_replace("\n", '</li><li>', htmlentities(trim(implode("\n", $ape_writer->errors)))) . '</li></ul></pre>'; } } else { $this->errors[] = 'FormatDataForAPE() failed'; } break; case 'id3v1': $id3v1_writer = new Id3v1(); if (($id3v1_writer->tag_data = $this->FormatDataForID3v1()) !== false) { $id3v1_writer->filename = $this->filename; if (($success = $id3v1_writer->WriteID3v1()) === false) { $this->errors[] = 'WriteID3v1() failed with message(s):<pre><ul><li>' . str_replace("\n", '</li><li>', htmlentities(trim(implode("\n", $id3v1_writer->errors)))) . '</li></ul></pre>'; } } else { $this->errors[] = 'FormatDataForID3v1() failed'; } break; case 'id3v2.2': case 'id3v2.3': case 'id3v2.4': $id3v2_writer = new Id3v2(); $id3v2_writer->majorversion = intval(substr($tagformat, -1)); $id3v2_writer->paddedlength = $this->id3v2_paddedlength; if (($id3v2_writer->tag_data = $this->FormatDataForID3v2($id3v2_writer->majorversion)) !== false) { $id3v2_writer->filename = $this->filename; if (($success = $id3v2_writer->WriteID3v2()) === false) { $this->errors[] = 'WriteID3v2() failed with message(s):<pre><ul><li>' . str_replace("\n", '</li><li>', htmlentities(trim(implode("\n", $id3v2_writer->errors)))) . '</li></ul></pre>'; } } else { $this->errors[] = 'FormatDataForID3v2() failed'; } break; case 'vorbiscomment': $vorbiscomment_writer = new Vorbiscomment(); if (($vorbiscomment_writer->tag_data = $this->FormatDataForVorbisComment()) !== false) { $vorbiscomment_writer->filename = $this->filename; if (($success = $vorbiscomment_writer->WriteVorbisComment()) === false) { $this->errors[] = 'WriteVorbisComment() failed with message(s):<pre><ul><li>' . str_replace("\n", '</li><li>', htmlentities(trim(implode("\n", $vorbiscomment_writer->errors)))) . '</li></ul></pre>'; } } else { $this->errors[] = 'FormatDataForVorbisComment() failed'; } break; case 'metaflac': $metaflac_writer = new Metaflac(); if (($metaflac_writer->tag_data = $this->FormatDataForMetaFLAC()) !== false) { $metaflac_writer->filename = $this->filename; if (($success = $metaflac_writer->WriteMetaFLAC()) === false) { $this->errors[] = 'WriteMetaFLAC() failed with message(s):<pre><ul><li>' . str_replace("\n", '</li><li>', htmlentities(trim(implode("\n", $metaflac_writer->errors)))) . '</li></ul></pre>'; } } else { $this->errors[] = 'FormatDataForMetaFLAC() failed'; } break; case 'real': $real_writer = new Real(); if (($real_writer->tag_data = $this->FormatDataForReal()) !== false) { $real_writer->filename = $this->filename; if (($success = $real_writer->WriteReal()) === false) { $this->errors[] = 'WriteReal() failed with message(s):<pre><ul><li>' . str_replace("\n", '</li><li>', htmlentities(trim(implode("\n", $real_writer->errors)))) . '</li></ul></pre>'; } } else { $this->errors[] = 'FormatDataForReal() failed'; } break; default: $this->errors[] = 'Invalid tag format to write: "' . $tagformat . '"'; return false; break; } if (!$success) { return false; } } return true; }