⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 functions_upload.inc.php

📁 一款文件上传程序
💻 PHP
字号:
<?php
require_once'includes/zip.class.php';

function validate_uploaded_file ( &$file, &$errors, &$uploaded )
{
	global $lang_upload, $UPL, $user_root, $upload_to, $overwrite, $max_storage, $space_used, $max_file_size, $file_types, $dest_path, $images_only, $dest_folder_info;

	if ( is_file ( $file['tmp_name'] ) )
	{
		@chmod ( $file['tmp_name'], 0777 );
	}
	// exceeds php limit
	if ( $file['error'] == 1 )
	{
		$errors [] = parse ( $lang_upload['upl_php_exceed'], array ( '{filename}' => $file['name'], '{max_file_size}' => ini_get ( 'upload_max_filesize' ) ) );
		return false;
	}
	// Skip empty fields
	if ( $file['error'] == 4 || ( $file['size'] == 0 && $file['tmp_name'] == '' ) )
	{
		return false;
	}
	// partial upload
	if ( $file['error'] == 3 )
	{
		$errors [] = parse ( $lang_upload['upl_partial_upload'], '{filename}', $file['name'] );
		return false;
	}
	// empty files
	if ( $file['size'] == 0 )
	{
		$errors [] = parse ( $lang_upload['upl_empty_file'], '{filename}', $file['name'] );
		return false;
	}

	// no PHP errors, check for user restrictions and other stuffs below.

	// file exists
	if ( file_exists ( $dest_path ) )
	{
		// come up with a new name for the file
		if ( $overwrite == 'rename' )
		{
			$fname = get_filename ( $file['name'] );
			$fext  = get_extension ( $file['name'] );
			$try   = $fname . '(1)' . ( $fext != '' ? '.' . $fext : '' );

			// keep trying until file does not exists
			for ( $i = 2; file_exists ( $user_root . $upload_to . '/' . $try ); $i++ )
			{
				$try = $fname . "($i)" . ( $fext != '' ? '.' . $fext : '' );
			}

			// set current name to new name
			$dest_path = $user_root . $upload_to . '/' . $try;

			$file['name'] = $try;
		}
		elseif ( $overwrite == 'skip' )
		{
			$errors [] = parse ( $lang_upload['upl_skipped'], '{filename}', $file['name'] );
			// go on to next file
			return false;
		}
	}

	// no more space
	if ( $max_storage > 0 && $space_used >= $max_storage )
	{
		$errors [] = parse ( $lang_upload['upl_storage_full'], '{filename}', $file['name'] );
		return false;
	}

	// bad file extension
	if ( $UPL['SETTINGS']['filetypes'] != '' && in_array ( get_extension ( $file['name'] ), explode ( ',', $UPL['SETTINGS']['filetypes'] ) ) )
	{
		$errors [] = parse ( $lang_upload['upl_bad_extension'], '{filename}', $file['name'] );
		return false;
	}

	// filename is invalid, cannot start with a dot
	if ( !preg_match ( '#[a-z0-9]#i', $file['name'][0] ) )
	{
		$errors [] = parse ( $lang_upload['upl_bad_name_start'], '{filename}', $file['name'] );
		return false;
	}

	// filename is invalid (no bad characters)
	if ( preg_match ( $UPL['CONFIGS']['REGEX_INVALID_CHARS'], $file['name'] ) )
	{
		$errors [] = parse ( $lang_upload['upl_bad_chars'], '{filename}', $file['name'] );
		return false;
	}

	// file is too big
	if ( $max_file_size > 0 && $file['size'] >= $max_file_size )
	{
		$errors [] = parse ( $lang_upload['upl_max_size'], array ( '{filename}' => $file['name'], '{max_file_size}' => get_size ( $max_file_size, 'B', 0 ) ) );
		return false;
	}

	// file type allowed?
	if ( !$images_only && $file_types != '' && $file_types != 'ANY' && ( !in_array ( get_extension ( $file['name'] ), explode ( ',', $file_types ) ) ) )
	{
		$errors [] = parse ( $lang_upload['upl_ext_not_alllowed'], '{filename}', $file['name'] );
		return false;
	}

	$is_image = is_image ( $file['tmp_name'] );

	// is file an image?
	if ( $images_only && !$is_image )
	{
		$errors [] = parse ( $lang_upload['upl_not_image'], '{filename}', $file['name'] );
		return false;
	}

	// uploading into a photo folder but isn't an image?
	if ( $dest_folder_info['is_gallery'] && !$is_image )
	{
		$errors [] = parse ( $lang_upload['upl_photo_folder'], array ( '{folder}' => basename ( $upload_to ), '{filename}' => $file['name'] ) );
		return false;
	}

	return true;
}

function process_zip_file ( $file )
{
	set_time_limit(60*15);
	$zip = new Zip;
	if ( !$zip->open($file) ) return false;

	while ( false !== ( $zip_entry = $zip->getFile() ) )
	{
		if ( !is_array ( $zip_entry ) ) continue;
		$tmp_name = tempnam ( "/tmp", "zip" );
		$buf = $zip_entry['content'];
		$fp = @fopen ( $tmp_name, 'ab' );
		if ( !$fp ) exit ( 'Could not create temporary file, upload.php on line ' . __LINE__ );
		@fwrite ( $fp, $buf );
		@fclose ( $fp );
		$_FILES[] = array ( 'name' => str_replace ( '/', '_', $zip_entry['name'] ), 'size' => $zip_entry['size'], 'tmp_name' => $tmp_name, 'type' => 'none', 'error' => 0 );
	}
	$zip->close();
	set_time_limit(0);
}


function validate_public_uploaded_file ( &$file, &$errors, &$uploaded )
{
	global $lang_upload, $UPL;

	if ( is_file ( $file['tmp_name'] ) )
	{
		@chmod ( $file['tmp_name'], 0777 );
	}
	// exceeds php limit
	if ( $file['error'] == 1 )
	{
		$errors [] = parse ( $lang_upload['upl_php_exceed'], array ( '{filename}' => $file['name'], '{max_file_size}' => ini_get ( 'upload_max_filesize' ) ) );
		return false;
	}
	// Skip empty fields
	if ( $file['error'] == 4 || ( $file['size'] == 0 && $file['tmp_name'] == '' ) )
	{
		return false;
	}
	// partial upload
	if ( $file['error'] == 3 )
	{
		$errors [] = parse ( $lang_upload['upl_partial_upload'], '{filename}', $file['name'] );
		return false;
	}
	// empty files
	if ( $file['size'] == 0 )
	{
		$errors [] = parse ( $lang_upload['upl_empty_file'], '{filename}', $file['name'] );
		return false;
	}

	// no PHP errors, check for user restrictions and other stuffs below.

	// bad file extension
	if ( $UPL['SETTINGS']['filetypes'] != '' && in_array ( get_extension ( $file['name'] ), explode ( ',', $UPL['SETTINGS']['filetypes'] ) ) )
	{
		$errors [] = parse ( $lang_upload['upl_bad_extension'], '{filename}', $file['name'] );
		return false;
	}

	// filename is invalid, cannot start with a dot
	if ( !preg_match ( '#[a-z0-9]#i', $file['name'][0] ) )
	{
		$errors [] = parse ( $lang_upload['upl_bad_name_start'], '{filename}', $file['name'] );
		return false;
	}

	// filename is invalid (no bad characters)
	if ( preg_match ( $UPL['CONFIGS']['REGEX_INVALID_CHARS'], $file['name'] ) )
	{
		$errors [] = parse ( $lang_upload['upl_bad_chars'], '{filename}', $file['name'] );
		return false;
	}

	// file is too big
	if ( $UPL['PUBLIC_SETTINGS']['max_file_size'] > 0 && $file['size'] >= $UPL['PUBLIC_SETTINGS']['max_file_size'] * 1024 )
	{
		$errors [] = parse ( $lang_upload['upl_max_size'], array ( '{filename}' => $file['name'], '{max_file_size}' => get_size ( $UPL['PUBLIC_SETTINGS']['max_file_size'] * 1024, 'B', 0 ) ) );
		return false;
	}

	// file type allowed?
	if ( !$UPL['PUBLIC_SETTINGS']['images_only'] && $UPL['PUBLIC_SETTINGS']['allowed_filetypes'] != 'ANY' && ( !in_array ( get_extension ( $file['name'] ), explode ( ',', $UPL['PUBLIC_SETTINGS']['allowed_filetypes'] ) ) ) )
	{
		$errors [] = parse ( $lang_upload['upl_ext_not_alllowed'], '{filename}', $file['name'] );
		return false;
	}

	// is file an image?
	if ( $UPL['PUBLIC_SETTINGS']['images_only'] && !is_image ( $file['tmp_name'] ) )
	{
		$errors [] = parse ( $lang_upload['upl_not_image'], '{filename}', $file['name'] );
		return false;
	}

	return true;
}
?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -