Server : nginx/1.22.1
System : Linux iZwz9daxib3w3i063fw434Z 3.10.0-1127.19.1.el7.x86_64 #1 SMP Tue Aug 25 17:23:54 UTC 2020 x86_64
User : www ( 1000)
PHP Version : 5.6.40
Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Directory :  /www/wwwroot/www.jkmold.com/phpcms/libs/classes/
Upload File :
Current Directory [ Writeable ] Root Directory [ Writeable ]


Current File : /www/wwwroot/www.jkmold.com/phpcms/libs/classes/attachment.class.php
<?php 

class attachment {

	var $contentid;

	var $module;

	var $catid;

	var $attachments;

	var $field;

	var $imageexts = array('gif', 'jpg', 'jpeg', 'png', 'bmp');

	var $uploadedfiles = array();

	var $downloadedfiles = array();

	var $error;

	var $upload_root;

	var $siteid;

	var $site = array();

	

	function __construct($module='', $catid = 0,$siteid = 0,$upload_dir = '') {

		$this->catid = intval($catid);

		$this->siteid = intval($siteid)== 0 ? 1 : intval($siteid);

		$this->module = $module ? $module : 'content';

		pc_base::load_sys_func('dir');		

		pc_base::load_sys_class('image','','0');

		$this->upload_root = pc_base::load_config('system','upload_path');

		$this->upload_func = 'copy';

		$this->upload_dir = $upload_dir;

	}

	/**

	 * 附件上传方法

	 * @param $field 上传字段

	 * @param $alowexts 允许上传类型

	 * @param $maxsize 最大上传大小

	 * @param $overwrite 是否覆盖原有文件

	 * @param $thumb_setting 缩略图设置

	 * @param $watermark_enable  是否添加水印

	 */

	function upload($field, $alowexts = '', $maxsize = 0, $overwrite = 0,$thumb_setting = array(), $watermark_enable = 1) {

		if(!isset($_FILES[$field])) {

			$this->error = UPLOAD_ERR_OK;

			return false;

		}

		if(empty($alowexts) || $alowexts == '') {

			$site_setting = $this->_get_site_setting($this->siteid);

			$alowexts = $site_setting['upload_allowext'];

		}

		$fn = $_GET['CKEditorFuncNum'] ? $_GET['CKEditorFuncNum'] : '1';

			

		$this->field = $field;

		$this->savepath = $this->upload_root.$this->upload_dir.date('Y/md/');

		$this->alowexts = $alowexts;

		$this->maxsize = $maxsize;

		$this->overwrite = $overwrite;

		$uploadfiles = array();

		$description = isset($GLOBALS[$field.'_description']) ? $GLOBALS[$field.'_description'] : array();

		if(is_array($_FILES[$field]['error'])) {

			$this->uploads = count($_FILES[$field]['error']);

			foreach($_FILES[$field]['error'] as $key => $error) {

				if($error === UPLOAD_ERR_NO_FILE) continue;

				if($error !== UPLOAD_ERR_OK) {

					$this->error = $error;

					return false;

				}

				$uploadfiles[$key] = array('tmp_name' => $_FILES[$field]['tmp_name'][$key], 'name' => $_FILES[$field]['name'][$key], 'type' => $_FILES[$field]['type'][$key], 'size' => $_FILES[$field]['size'][$key], 'error' => $_FILES[$field]['error'][$key], 'description'=>$description[$key],'fn'=>$fn);

			}

		} else {

			$this->uploads = 1;

			if(!$description) $description = '';

			$uploadfiles[0] = array('tmp_name' => $_FILES[$field]['tmp_name'], 'name' => $_FILES[$field]['name'], 'type' => $_FILES[$field]['type'], 'size' => $_FILES[$field]['size'], 'error' => $_FILES[$field]['error'], 'description'=>$description,'fn'=>$fn);

		}



		if(!dir_create($this->savepath)) {

			$this->error = '8';

			return false;

		}

		if(!is_dir($this->savepath)) {

			$this->error = '8';

			return false;

		}

		@chmod($this->savepath, 0777);



		if(!is_writeable($this->savepath)) {

			$this->error = '9';

			return false;

		}

		if(!$this->is_allow_upload()) {

			$this->error = '13';

			return false;

		}

		$aids = array();

		foreach($uploadfiles as $k=>$file) {

			$fileext = fileext($file['name']);

			if($file['error'] != 0) {

				$this->error = $file['error'];

				return false;				

			}

			if(!preg_match("/^(".$this->alowexts.")$/", $fileext)) {

				$this->error = '10';

				return false;

			}

			if($this->maxsize && $file['size'] > $this->maxsize) {

				$this->error = '11';

				return false;

			}

			if(!$this->isuploadedfile($file['tmp_name'])) {

				$this->error = '12';

				return false;

			}

			$temp_filename = $this->getname($fileext);

			$savefile = $this->savepath.$temp_filename;

			$savefile = preg_replace("/(php|phtml|php3|php4|jsp|exe|dll|asp|cer|asa|shtml|shtm|aspx|asax|cgi|fcgi|pl)(\.|$)/i", "_\\1\\2", $savefile);

			$filepath = preg_replace(new_addslashes("|^".$this->upload_root."|"), "", $savefile);

			if(!$this->overwrite && file_exists($savefile)) continue;

			$upload_func = $this->upload_func;

			if(@$upload_func($file['tmp_name'], $savefile)) {

				$this->uploadeds++;

				@chmod($savefile, 0644);

				@unlink($file['tmp_name']);

				$file['name'] = iconv("utf-8",CHARSET,$file['name']);

				$file['name'] = safe_replace($file['name']);

				$uploadedfile = array('filename'=>$file['name'], 'filepath'=>$filepath, 'filesize'=>$file['size'], 'fileext'=>$fileext, 'fn'=>$file['fn']);

				$thumb_enable = is_array($thumb_setting) && ($thumb_setting[0] > 0 || $thumb_setting[1] > 0 ) ? 1 : 0;	

				$image = new image($thumb_enable,$this->siteid);				

				if($thumb_enable) {

					$image->thumb($savefile,'',$thumb_setting[0],$thumb_setting[1]);

				}

				if($watermark_enable) {

					$image->watermark($savefile, $savefile);

				}

				$aids[] = $this->add($uploadedfile);

			}

		}

		return $aids;

	}

	

	/**

	 * 附件下载

	 * Enter description here ...

	 * @param $field 预留字段

	 * @param $value 传入下载内容

	 * @param $watermark 是否加入水印

	 * @param $ext 下载扩展名

	 * @param $absurl 绝对路径

	 * @param $basehref 

	 */

	function download($field, $value,$watermark = '0',$ext = 'gif|jpg|jpeg|bmp|png', $absurl = '', $basehref = '')

	{

		global $image_d;

		$this->att_db = pc_base::load_model('attachment_model');

		$upload_url = pc_base::load_config('system','upload_url');

		$this->field = $field;

		$dir = date('Y/md/');

		$uploadpath = $upload_url.$dir;

		$uploaddir = $this->upload_root.$dir;

		$string = new_stripslashes($value);

		if(!preg_match_all("/(href|src)=([\"|']?)([^ \"'>]+\.($ext))\\2/i", $string, $matches)) return $value;

		$remotefileurls = array();

		foreach($matches[3] as $matche)

		{

			if(strpos($matche, '://') === false) continue;

			dir_create($uploaddir);

			$remotefileurls[$matche] = $this->fillurl($matche, $absurl, $basehref);

		}

		unset($matches, $string);

		$remotefileurls = array_unique($remotefileurls);

		$oldpath = $newpath = array();

		foreach($remotefileurls as $k=>$file) {

			if(strpos($file, '://') === false || strpos($file, $upload_url) !== false) continue;

			$filename = fileext($file);

			if(!preg_match("/($ext)/is",$filename) || in_array($filename, array('php','phtml','php3','php4','jsp','dll','asp','cer','asa','shtml','shtm','aspx','asax','cgi','fcgi','pl'))){

				continue;

			}

			$file_name = basename($file);

			$filename = $this->getname($filename);



			$newfile = $uploaddir.$filename;

			$upload_func = $this->upload_func;

			if($upload_func($file, $newfile)) {

				$oldpath[] = $k;

				$GLOBALS['downloadfiles'][] = $newpath[] = $uploadpath.$filename;

				@chmod($newfile, 0777);

				$fileext = fileext($filename);

				if($watermark){

					watermark($newfile, $newfile,$this->siteid);

				}

				$filepath = $dir.$filename;

				$downloadedfile = array('filename'=>$filename, 'filepath'=>$filepath, 'filesize'=>filesize($newfile), 'fileext'=>$fileext);

				$aid = $this->add($downloadedfile);

				$this->downloadedfiles[$aid] = $filepath;

			}

		}

		return str_replace($oldpath, $newpath, $value);

	}	

	/**

	 * 附件删除方法

	 * @param $where 删除sql语句

	 */

	function delete($where) {

		$this->att_db = pc_base::load_model('attachment_model');

		$result = $this->att_db->select($where);

		foreach($result as $r) {

			$image = $this->upload_root.$r['filepath'];

			@unlink($image);

			$thumbs = glob(dirname($image).'/*'.basename($image));

			if($thumbs) foreach($thumbs as $thumb) @unlink($thumb);

		}

		return $this->att_db->delete($where);

	}

	

	/**

	 * 附件添加如数据库

	 * @param $uploadedfile 附件信息

	 */

	function add($uploadedfile) {

		$this->att_db = pc_base::load_model('attachment_model');

		$uploadedfile['module'] = $this->module;

		$uploadedfile['catid'] = $this->catid;

		$uploadedfile['siteid'] = $this->siteid;

		$uploadedfile['userid'] = $this->userid;

		$uploadedfile['uploadtime'] = SYS_TIME;

		$uploadedfile['uploadip'] = ip();

		$uploadedfile['status'] = pc_base::load_config('system','attachment_stat') ? 0 : 1;

		$uploadedfile['authcode'] = md5($uploadedfile['filepath']);

		$uploadedfile['filename'] = strlen($uploadedfile['filename'])>49 ? $this->getname($uploadedfile['fileext']) : $uploadedfile['filename'];

		$uploadedfile['isimage'] = in_array($uploadedfile['fileext'], $this->imageexts) ? 1 : 0;

		$aid = $this->att_db->api_add($uploadedfile);

		$this->uploadedfiles[] = $uploadedfile;

		return $aid;

	}

	

	function set_userid($userid) {

		$this->userid = $userid;

	}

	/**

	 * 获取缩略图地址..

	 * @param $image 图片路径

	 */

	function get_thumb($image){

		return str_replace('.', '_thumb.', $image);

	}





	/**

	 * 获取附件名称

	 * @param $fileext 附件扩展名

	 */

	function getname($fileext){

		return date('Ymdhis').rand(100, 999).'.'.$fileext;

	}



	/**

	 * 返回附件大小

	 * @param $filesize 图片大小

	 */

	

	function size($filesize) {

		if($filesize >= 1073741824) {

			$filesize = round($filesize / 1073741824 * 100) / 100 . ' GB';

		} elseif($filesize >= 1048576) {

			$filesize = round($filesize / 1048576 * 100) / 100 . ' MB';

		} elseif($filesize >= 1024) {

			$filesize = round($filesize / 1024 * 100) / 100 . ' KB';

		} else {

			$filesize = $filesize . ' Bytes';

		}

		return $filesize;

	}

	/**

	* 判断文件是否是通过 HTTP POST 上传的

	*

	* @param	string	$file	文件地址

	* @return	bool	所给出的文件是通过 HTTP POST 上传的则返回 TRUE

	*/

	function isuploadedfile($file) {

		return is_uploaded_file($file) || is_uploaded_file(str_replace('\\\\', '\\', $file));

	}

	

	/**

	* 补全网址

	*

	* @param	string	$surl		源地址

	* @param	string	$absurl		相对地址

	* @param	string	$basehref	网址

	* @return	string	网址

	*/

	function fillurl($surl, $absurl, $basehref = '') {

		if($basehref != '') {

			$preurl = strtolower(substr($surl,0,6));

			if($preurl=='http://' || $preurl=='ftp://' ||$preurl=='mms://' || $preurl=='rtsp://' || $preurl=='thunde' || $preurl=='emule://'|| $preurl=='ed2k://')

			return  $surl;

			else

			return $basehref.'/'.$surl;

		}

		$i = 0;

		$dstr = '';

		$pstr = '';

		$okurl = '';

		$pathStep = 0;

		$surl = trim($surl);

		if($surl=='') return '';

		$urls = @parse_url(SITE_URL);

		$HomeUrl = $urls['host'];

		$BaseUrlPath = $HomeUrl.$urls['path'];

		$BaseUrlPath = preg_replace("/\/([^\/]*)\.(.*)$/",'/',$BaseUrlPath);

		$BaseUrlPath = preg_replace("/\/$/",'',$BaseUrlPath);

		$pos = strpos($surl,'#');

		if($pos>0) $surl = substr($surl,0,$pos);

		if($surl[0]=='/') {

			$okurl = 'http://'.$HomeUrl.'/'.$surl;

		} elseif($surl[0] == '.') {

			if(strlen($surl)<=2) return '';

			elseif($surl[0]=='/') {

				$okurl = 'http://'.$BaseUrlPath.'/'.substr($surl,2,strlen($surl)-2);

			} else {

				$urls = explode('/',$surl);

				foreach($urls as $u) {

					if($u=="..") $pathStep++;

					else if($i<count($urls)-1) $dstr .= $urls[$i].'/';

					else $dstr .= $urls[$i];

					$i++;

				}

				$urls = explode('/', $BaseUrlPath);

				if(count($urls) <= $pathStep)

				return '';

				else {

					$pstr = 'http://';

					for($i=0;$i<count($urls)-$pathStep;$i++) {

						$pstr .= $urls[$i].'/';

					}

					$okurl = $pstr.$dstr;

				}

			}

		} else {

			$preurl = strtolower(substr($surl,0,6));

			if(strlen($surl)<7)

			$okurl = 'http://'.$BaseUrlPath.'/'.$surl;

			elseif($preurl=="http:/"||$preurl=='ftp://' ||$preurl=='mms://' || $preurl=="rtsp://" || $preurl=='thunde' || $preurl=='emule:'|| $preurl=='ed2k:/')

			$okurl = $surl;

			else

			$okurl = 'http://'.$BaseUrlPath.'/'.$surl;

		}

		$preurl = strtolower(substr($okurl,0,6));

		if($preurl=='ftp://' || $preurl=='mms://' || $preurl=='rtsp://' || $preurl=='thunde' || $preurl=='emule:'|| $preurl=='ed2k:/') {

			return $okurl;

		} else {

			$okurl = preg_replace('/^(http:\/\/)/i','',$okurl);

			$okurl = preg_replace('/\/{1,}/i','/',$okurl);

			return 'http://'.$okurl;

		}

	}



	/**

	 * 是否允许上传

	 */

	function is_allow_upload() {

        if($_groupid == 1) return true;

		$starttime = SYS_TIME-86400;

		$site_setting = $this->_get_site_setting($this->siteid);

		return ($uploads < $site_setting['upload_maxsize']);

	}

	

	/**

	 * 返回错误信息

	 */

	function error() {

		$UPLOAD_ERROR = array(

		0 => L('att_upload_succ'),

		1 => L('att_upload_limit_ini'),

		2 => L('att_upload_limit_filesize'),

		3 => L('att_upload_limit_part'),

		4 => L('att_upload_nofile'),

		5 => '',

		6 => L('att_upload_notemp'),

		7 => L('att_upload_temp_w_f'),

		8 => L('att_upload_create_dir_f'),

		9 => L('att_upload_dir_permissions'),

		10 => L('att_upload_limit_ext'),

		11 => L('att_upload_limit_setsize'),

		12 => L('att_upload_not_allow'),

		13 => L('att_upload_limit_time'),

		);

		

		return iconv(CHARSET,"utf-8",$UPLOAD_ERROR[$this->error]);

	}

	

	/**

	 * ck编辑器返回

	 * @param $fn 

	 * @param $fileurl 路径

	 * @param $message 显示信息

	 */

	

	function mkhtml($fn,$fileurl,$message) {

		$str='<script type="text/javascript">window.parent.CKEDITOR.tools.callFunction('.$fn.', \''.$fileurl.'\', \''.$message.'\');</script>';

		exit($str);

	}

	/**

	 * flash上传调试方法

	 * @param $id

	 */

	function uploaderror($id = 0)	{

		file_put_contents(PHPCMS_PATH.'xxx.txt', $id);

	}

	

	/**

	 * 获取站点配置信息

	 * @param  $siteid 站点id

	 */

	private function _get_site_setting($siteid) {

		$siteinfo = getcache('sitelist', 'commons');

		return string2array($siteinfo[$siteid]['setting']);

	}

}

?>