| Pauk | 
					
						 Отправлено: 30 мая 2011 — 09:29          
					 | 
				 
				
					
	        			
  
						  
        				Advanced Member 
        				 
  
        				Покинул форум 
        				Сообщений всего: 327 
        				Дата рег-ции: Март 2009  
        				 
						Репутация: 6 
        				 
        				 
         				 
        				  
					 | 
					Парни, странная бага началась при закачивании/скачивании архивов... почему то при скачивании архив все время битый, хотя заливаю предварительно архивированный, нормальный файл, но при скачивании он почему то битым становится...  
У кого какие есть мысли? 
(Добавление) 
насколько помню менял однажды файл upload.class.php, но потом действия отменял - может в нем какие строки покоцал: 
Мой файл (Отобразить)
CODE:<?php 
if (!defined('IN_EXBB')) die('Hack attempt!'); 
class UPLOAD{ 
		/* 
			Флаг русской локали boolean 
		*/ 
		var $_TEMPNAME		= ''; 
		var $_NAME			= ''; 
		var $_SIZE			= ''; 
		var $_TYPE			= ''; 
		var $_IMAGE			= ''; 
 
		var $_REQUEST_TYPE	= '.*'; 
        var $_TARFILE		= FALSE; 
		function UPLOAD($maxsize) { 
 
				$this->_TEMPNAME	= $_FILES['FILE_UPLOAD']['tmp_name']; 
				$this->_NAME		= $_FILES['FILE_UPLOAD']['name']; 
				$this->_SIZE		= $_FILES['FILE_UPLOAD']['size']; 
				$this->_TYPE		= $_FILES['FILE_UPLOAD']['type']; 
 
				switch ($_FILES['FILE_UPLOAD']['error']) { 
					case 1: 	define("UP_ERROR",'Ошибка загрузки файла! Размер файла больше установленного в директиве upload_max_filesize в php.ini'); 
								break; 
					case 2:		define("UP_ERROR",'Ошибка загрузки файла! Размер файла больше разрешенного на форуме!'); 
								break; 
					case 3:		define("UP_ERROR",'Ошибка загрузки файла! Файл загружен только частично!'); 
								break; 
					case 4: 	define("UP_NOADDED",TRUE); 
								break; 
					default:	break; 
				} 
 
				if (!defined("UP_ERROR") && !defined("UP_NOADDED")) { 
					if ($this->_NAME == "" || $this->_NAME == 'none') { 
						define("UP_ERROR",'Ошибка загрузки файла! Не указано имя закачиваемого файла!');; 
					} elseif ($this->_SIZE > $maxsize) { 
							define("UP_ERROR",'Ошибка загрузки файла! Размер загруженного файла больше, чем разрешено на форуме!'); 
					} elseif ($this->_SIZE == 0) { 
							define("UP_ERROR",'Ошибка загрузки файла! Размер закачанного файла 0 b!'); 
					} 
				} 
		} 
 
		function DoUpload($mode,$destination,$storage_name,$max_width = 0,$max_height = 0) { 
        		$this->_IMAGE = @getimagesize($this->_TEMPNAME); 
        		$mode = ($this->_IMAGE !== FALSE && $mode !== 'image') ? 'image':$mode; 
        		if ($mode === 'image') { 
        			if ($this->_IMAGE === FALSE) { 
        				define("UP_ERROR",'Ошибка загрузки файла! Загружаемый файл не является правильным изображением!'); 
						return FALSE; 
					} 
					return $this->IMAGE($max_width,$max_height,$destination,$storage_name); 
				} else { 
        				return $this->FILE($destination,$storage_name); 
        		} 
		} 
 
        function FILE($dest,$storage) { 
				if (!preg_match("#\.(".$this->_REQUEST_TYPE.")$#is",$this->_NAME)) { 
					define("UP_ERROR",'Ошибка загрузки файла! Запрещенное расширение файла!'); 
					return FALSE; 
				} 
				$storage = $storage.'.ext'; 
 
				if ($this->_TARFILE === TRUE) { 
					if (($filetype = $this->_TarAttach($dest.$storage)) === FALSE) { 
						define("UP_ERROR",'Ошибка загрузки файла! Не могу упаковать файл!'); 
						return FALSE; 
					} 
				} else { 
						if (!move_uploaded_file($this->_TEMPNAME,  $dest.$storage)) { 
							define("UP_ERROR",'Ошибка загрузки файла! Сервер не смог скопировать файл в директорию '.$dest.'. Проверьте права на эту папку!'); 
							return FALSE; 
						} 
						$filetype = 'file'; 
				} 
 
				return array('NAME' 	=> $this->_NAME, 
							'STORAGE'	=> $storage, 
        					'SIZE' 		=> $this->_SIZE, 
        					'TYPE' 		=> $filetype); 
        } 
 
		function IMAGE($_width,$_height,$dest,$storage) { 
				list($width, $height) = $this->_IMAGE; 
				if ($width > $_width || $height > $_height) { 
					define("UP_ERROR",'Ошибка загрузки файла! Ширина или высота закачиваемого изображения больше разрешенных на форуме!'); 
					return FALSE; 
				} 
 
				if (!preg_match('#image\/[x\-]*(jpeg|pjpeg|jpg|gif|png|bmp|tiff)#', $this->_TYPE, $type)) { 
					define("UP_ERROR",'Ошибка загрузки файла! Запрещенное расширение файла!'); 
					return FALSE; 
				} 
 
				switch ($type[1]) { 
					case 'jpeg': 
					case 'pjpeg': 
					case 'jpg':		$ext = '.jpg'; 
									break; 
					case 'gif':		$ext = '.gif'; 
									break; 
					case 'png':		$ext = '.png'; 
									break; 
					case 'bmp':		$ext = '.bmp'; 
									break; 
					case 'tiff':	$ext = '.tiff'; 
									break; 
				} 
 
				$storage = $storage.$ext; 
				if (!move_uploaded_file($this->_TEMPNAME,  $dest.$storage)) { 
					define("UP_ERROR",'Ошибка загрузки файла! Сервер не смог скопировать файл в директорию '.$dest.'. Проверьте права на эту папку!'); 
					return FALSE; 
				} 
 
				return array('NAME' 	=> $this->_NAME, 
							'STORAGE'	=> $storage, 
        					'SIZE' 		=> $this->_SIZE, 
        					'TYPE' 		=> 'image', 
        					'WIDTH'		=> $width, 
        					'HEIGHT'	=> $height); 
		} 
 
		function _TarAttach($tarfile) { 
				$stat = stat($this->_TEMPNAME); 
 
				if (!is_array($stat) || !is_file($this->_TEMPNAME) || ($fp = fopen($this->_TEMPNAME, 'rb')) === FALSE) { 
					//define("UP_ERROR",'Это не массив в результате работы stat'); 
					return FALSE; 
				} 
 
				$data = fread($fp, filesize($this->_TEMPNAME)); 
				fclose($fp); 
 
 
				$files[0] = array ( 'name'     => $this->_NAME, 
									'mode'     => fileperms($this->_TEMPNAME), 
									'uid'      => $stat[4], 
									'gid'      => $stat[5], 
									'size'     => strlen($data), 
									'mtime'    => filemtime($this->_TEMPNAME), 
									'typeflag' => 0, 
									'linkname' => "", 
									'uname'    => 'unknown', 
									'gname'    => 'unknown', 
									'data'     => $data 
								); 
 
               	$uploadtime = date("F j, Y, H:i:s"); 
                $readme = "Upload time: $uploadtime\r\nFile saved from http://".$_SERVER['SERVER_NAME']; 
 
				$files[1] = array ( 'name'     => "readme.txt", 
									'mode'     => 33152, 
									'uid'      => $stat[4], 
									'gid'      => $stat[5], 
									'size'     => strlen($readme), 
									'mtime'    => time(), 
									'typeflag' => 0, 
									'linkname' => "", 
									'uname'    => 'unknown', 
									'gname'    => 'unknown', 
									'data'     => $readme 
								); 
				unset($stat); 
				clearstatcache(); 
 
				$tardata = ""; 
				foreach ($files as $file) { 
						$prefix = ""; 
						$tmp    = ""; 
						$last   = ""; 
						if (strlen($file['name']) > 99) { 
							$pos = strrpos( $file['name'], "/" ); 
							if (is_string($pos) && !$pos) { 
								//define("UP_ERROR",'if (is_string(\$pos) && !\$pos)'); 
								return FALSE; 
							} 
 
							$prefix = substr( $file['name'], 0 , $pos ); 
							$file['name'] = substr( $file['name'], ($pos+1)); 
 
							if (strlen($prefix) > 154) { 
								//define("UP_ERROR",'if (strlen(\$prefix) > 154)'); 
								return FALSE; 
							} 
						} 
 
						$mode	= sprintf("%6s ", decoct($file['mode'])); 
						$uid	= sprintf("%6s ", decoct($file['uid'])); 
						$gid	= sprintf("%6s ", decoct($file['gid'])); 
						$size	= sprintf("%11s ", decoct($file['size'])); 
						$mtime	= sprintf("%11s ", decoct($file['mtime'])); 
						$tmp	= pack("a100a8a8a8a12a12",$file['name'],$mode,$uid,$gid,$size,$mtime); 
						$last	= pack("a1"   , $file['typeflag']); 
						$last	.= pack("a100" , $file['linkname']); 
						$last	.= pack("a6", "ustar"); // magic 
						$last	.= pack("a2", "" ); // version 
						$last	.= pack("a32", $file['uname']); 
						$last	.= pack("a32", $file['gname']); 
						$last	.= pack("a8", ""); // devmajor 
						$last	.= pack("a8", ""); // devminor 
						$last	.= pack("a155", $prefix); 
 
						$test_len = $tmp . $last . "12345678"; 
						$last .= $this->internal_build_string( "\0" , (512 - strlen($test_len)) ); 
						$checksum = 0; 
 
						for ($i = 0 ; $i < 148 ; $i++ ) { 
							$checksum += ord( substr($tmp, $i, 1) ); 
						} 
 
						for ($i = 148 ; $i < 156 ; $i++) { 
							$checksum += ord(' '); 
						} 
 
						for ($i = 156, $j = 0 ; $i < 512 ; $i++, $j++) { 
							$checksum += ord( substr($last, $j, 1) ); 
						} 
 
						$checksum = sprintf( "%6s ", decoct($checksum) ); 
						$tmp .= pack("a8", $checksum); 
						$tmp .= $last; 
						$tmp .= $file['data']; 
						if ($file['size'] > 0) { 
							if ($file['size'] % 512 != 0) { 
								$homer = $this->internal_build_string( "\0" , (512 - ($file['size'] % 512)) ); 
								$tmp .= $homer; 
							} 
						} 
						$tardata .= $tmp; 
				} 
 
				$tardata .= pack( "a512", "" ); 
				if (extension_loaded("zlib")) { 
					$tardata = gzencode ($tardata,9); 
					$fp = fopen($tarfile, 'wb'); 
					fwrite($fp, $tardata, strlen($tardata)); 
					fclose($fp); 
					$gzip = 'gz'; 
				} else { 
						$fp = fopen($tarfile, 'wb'); 
						fputs($fp, $tardata, strlen($tardata)); 
						fclose($fp); 
						$gzip = 'tar'; 
				} 
				$this->_SIZE = filesize($tarfile); 
				return $gzip; 
		} 
 
		function internal_build_string($string="", $times=0) { 
				$return = ""; 
				for ($i=0 ; $i < $times ; ++$i ) { 
					$return .= $string; 
				} 
				return $return; 
		} 
} 
?>    (Отредактировано автором: 30 мая 2011 — 09:37)  | 
				 
				
					|   | 
					
						
						 
					 | 
				 
			 
            						
            			
				
					| Pauk | 
					
						 Отправлено: 31 мая 2011 — 17:48          
					 | 
				 
				
					
	        			
  
						  
        				Advanced Member 
        				 
  
        				Покинул форум 
        				Сообщений всего: 327 
        				Дата рег-ции: Март 2009  
        				 
						Репутация: 6 
        				 
        				 
         				 
        				  
					 | 
					Юрий спасибо большое, думал абсолютно все исправления стоят... поправил файл, но он отличался от того, на который вы давали ссылку, правда не знаю насколько критично: 
 
Спойлер (Отобразить)CODE:<?php 
/**************************************************************************** 
* ExBB v.1.1                                                              	* 
* Copyright (c) 2002-20хх by Alexander Subhankulov aka Warlock            	* 
*                                                                         	* 
* http://www.exbb.net                                             			* 
* email: admin@exbb.net                                           			* 
*                                                                         	* 
****************************************************************************/ 
/**************************************************************************** 
*                                                                         	* 
*   This program is free software; you can redistribute it and/or modify  	* 
*   it under the terms of the GNU General Public License as published by  	* 
*   the Free Software Foundation; either version 2 of the License, or     	* 
*   (at your option) any later version.                                   	* 
*                                                                         	* 
****************************************************************************/ 
define('ATTACH',true); 
define('IN_EXBB', TRUE); 
include('./include/common.php'); 
 
$fm->_GetVars(); 
$fm->_String('action'); 
 
switch ($fm->input['action']) { 
	case 'attach'   : 	attachment(); 
						break; 
	case 'error'   	: 	ImgError(); 
						break; 
	case 'link'   	: 	create_tmb($fm->_String('img')); 
						break; 
	default: mailtouser(); break; 
} 
 
function ImgError() { 
		header("Content-Type: image/png"); 
		header("Content-Transfer-Encoding: binary"); 
		header("Content-Disposition: inline; filename=\"error404.png\""); 
		header("Content-Length: ".(string)(filesize("im/images/error404.png"))); 
		readfile("im/images/error404.png"); 
		exit; 
} 
 
function attachment() { 
		global $fm; 
 
		$img = $fm->_Boolean($fm->input,'img'); 
		if (($forum_id = $fm->_Intval('f')) === 0 || ($topic_id = $fm->_Intval('t')) === 0 || ($attach_id = $fm->_Intval('id')) === 0) { 
			if ($img === TRUE ) ImgError(); 
			else $fm->_Message($fm->LANG['MainMsg'],"aaa".$fm->LANG['CorrectPost']); 
		} 
 
		$allforums = $fm->_Read(FM_ALLFORUMS); 
		if (!isset($allforums[$forum_id])) { 
			if ($img === TRUE ) ImgError(); 
			else $fm->_Message($fm->LANG['MainMsg'],$fm->LANG['CorrectPost']); 
		} 
 
		if ($allforums[$forum_id]['private'] === TRUE && !defined('IS_ADMIN')) { 
			if ($fm->user['id'] === 0) { 
				if ($img === TRUE ) ImgError(); 
				else $fm->_Message($fm->LANG['MainMsg'],$fm->LANG['UserUnreg'],'loginout.php'); 
			} 
			$userprivate = (isset($fm->user['private'][$forum_id]) && $fm->user['private'][$forum_id] === TRUE) ? TRUE:FALSE; 
			if ($userprivate === FALSE) { 
				if ($img === TRUE ) ImgError(); 
				else $fm->_Message($fm->LANG['PrivatForum'],$fm->LANG['PrivatRule']); 
			} 
		} 
        unset($allforums); 
 
        if (!file_exists('forum'.$forum_id.'/attaches-'.$topic_id.'.php')) { 
        	if ($img === TRUE ) ImgError(); 
			else $fm->_Message($fm->LANG['MainMsg'],$fm->LANG['CorrectPost']); 
		} 
		$attaches = $fm->_Read2Write($fp_attach,'forum'.$forum_id.'/attaches-'.$topic_id.'.php'); 
		if (count($attaches) === 0) { 
			$fm->_Fclose($fp_attach); 
			unlink('forum'.$forum_id.'/attaches-'.$topic_id.'.php'); 
			if ($img === TRUE ) ImgError(); 
			else $fm->_Message($fm->LANG['MainMsg'],$fm->LANG['CorrectPost']); 
		} 
 
		if (!file_exists('uploads/'.$attaches[$attach_id]['id'])) { 
			$fm->_Fclose($fp_attach); 
			if ($img === TRUE ) ImgError(); 
			else $fm->_Message($fm->LANG['MainMsg'],$fm->LANG['CorrectPost']); 
		} 
		$attaches[$attach_id]['hits']++; 
       	$fm->_Write($fp_attach,$attaches); 
 
		if ($fm->_Boolean($fm->input,'icon') === TRUE) {                   // application/x-gzip 
			create_tmb('uploads/'.$attaches[$attach_id]['id']); 
		} else { 
				$type = 'unknown/unknown'; 
				switch ($attaches[$attach_id]['type']) { 
					case 'gz'	:	$attaches[$attach_id]['file'] = preg_replace("#\.[A-Za-z0-9]{1,5}$#is",".tar.gz",$attaches[$attach_id]['file']); 
									$type = 'application/x-gzip'; 
									break; 
					case 'tar'	:	$attaches[$attach_id]['file'] = preg_replace("#\.[A-Za-z0-9]{1,5}$#is",".tar",$attaches[$attach_id]['file']); 
									$type = 'application/x-tar'; 
									break; 
					default		:	$extension = strtolower(substr(strrchr($attaches[$attach_id]['file'],'.'),1)); 
									switch ($extension) { 
										case 'gif' 	: $type = 'image/gif'; break; 
										case 'jpg' 	: 
										case 'jpeg' : $type = 'image/pjpeg'; break; 
										case 'pdf' 	: $type = 'application/pdf'; break; 
										case 'zip' 	: $type = 'application/zip'; break; 
										case 'pdf' 	: $type = 'application/pdf'; break; 
										default 	:  $type = 'unknown/unknown'; break; 
									}; 
									break; 
				} 
 
				header("Content-Type: ".$type); 
				header("Content-Transfer-Encoding: binary"); 
				header("Content-Disposition: ".(($img === TRUE) ? "inline":"attachment")."; filename=\"".$attaches[$attach_id]['file']."\""); 
				header("Content-Length: ".(string)($attaches[$attach_id]['size'])); 
				readfile('uploads/'.$attaches[$attach_id]['id']); 
		} 
		exit; 
} 
 
function create_tmb($bigimgsrc) { 
          $rgb = 0xFFFFFF; 
          $quality = 100; 
          $width = 250; 
 
          if ($size = @getimagesize($bigimgsrc)){ 
               if ($size === false) { 
                    ImgError(); 
                    return false; 
               } 
                   if ($size[0]<=350){ 
                    $format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1)); 
                           $icfunc = "imagecreatefrom" . $format; 
                           if (!function_exists($icfunc)) { 
                                ImgError(); 
                                return false; 
                           } 
                               $width1 = $size[0]; 
                            $height1 = $size[1];                              
                           header("Content-type: image/jpg"); 
                           $bigimg = $icfunc($bigimgsrc); 
                           $trumbalis = imagecreatetruecolor($width1, $height1); 
                           imagefill($trumbalis, 0, 0, $rgb); 
                           imagecopyresampled($trumbalis, $bigimg, 0, 0, 0, 0, $width1, $height1, $size[0], $size[1]); 
                           imagejpeg($trumbalis); 
                           flush(); 
                           imagedestroy($bigimg); 
                           imagedestroy($trumbalis); 
                   } 
                   else{ 
                           $format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1)); 
                           $icfunc = "imagecreatefrom" . $format; 
                           if (!function_exists($icfunc)) { 
                                ImgError(); 
                                return false; 
                           } 
                           $x_ratio = $size[0]/$width; 
                           $height = floor($size[1]/$x_ratio); 
                           header("Content-type: image/gif"); 
                           $bigimg = $icfunc($bigimgsrc); 
                           $trumbalis = imagecreatetruecolor($width, $height); 
                           imagefill($trumbalis, 0, 0, $rgb); 
                           imagecopyresampled($trumbalis, $bigimg, 0, 0, 0, 0, $width, $height, $size[0], $size[1]); 
                           imagejpeg($trumbalis); 
                           flush(); 
                           imagedestroy($bigimg); 
                           imagedestroy($trumbalis); 
                   } 
                
          } else { 
                    ImgError(); 
          } 
          return; 
} 
?> 
   (Отредактировано автором: 31 мая 2011 — 17:49)  | 
				 
				
					|   | 
					
						
						 
					 | 
				 
			 
            			
            			
            			
            
					 |