PHP Upload Script

Status
Niet open voor verdere reacties.

GooGooJansen

Gebruiker
Lid geworden
16 jul 2006
Berichten
513
Hallo,

Ik heb een PHP Upload Script gevonden, werkt goed. Maar... deze doet als er al een bestand is dat bestand overschrijven, dit wil ik niet. Ik wil dat die er dan wat achter zet, maakt niet uit wat. Bijvoorbeeld: bestand2akdsajflkhsnkajbf.jpg omdat het bestand bestand.jpg al bestaat. Hoe doe ik dit?

GooGooJansen

PHP:
<?php
error_reporting(E_ALL);
/**********************************************************************************
* Multifile files upload at once with a form, 
* optional image resize for jpeg gif and png during upload
* Author: scripts[AT ][ .]titude.nl - NLD - 2007
* For use with resize Requires GD ( 2.0.28 or up for gif support )

# example .htaccess
php_value max_execution_time = 3600
php_value max_input_time = 3600
php_value post_max_size 18M
php_value upload_max_filesize 15M
**********************************************************************************/
$m_cnfg['max_size'] = 2048000; // size per file in bytes - 0 is unlimited
$m_cnfg['max_files'] = 20; // max files to upload - 0 is unlimited
$m_cnfg['ext_oke'] = array();  // allowed extensions, empty allow all
// $m_cnfg['ext_oke'] = array('png','jpg','gif');
$m_cnfg['upload_dir'] = $_SERVER['DOCUMENT_ROOT'] . "/images/stories/slideshow/"; // upload dir 
$m_cnfg['overwrite'] = true; // allow files overwrite on true
$m_cnfg['newname'] = ""; // file rename "" or "timestamp" or set a rename prefix 
$m_cnfg['inputname'] = "bestanden"; // input file form array name
$m_cnfg['imggd'] = array('jpg'); // resize with GD
$m_cnfg['imgw'] = 900; // max width for resize - 0 is no resize
$m_cnfg['imgh'] = 290; // max height for resize - 0 is no resize

$m_log = multiup($m_cnfg);

function multiup($m_cnfg) {
	$upmsg = array();
	if ($m_cnfg['max_size'] != 0) {
		$maxdisp = ($m_cnfg['max_size'] >= 1024000) ? round($m_cnfg['max_size'] / 10240) / 100 . " Mb" : round($m_cnfg['max_size'] / 10.24) / 100 . " Kb";
		$upmsg['rules'][] = "Max file size: " . $maxdisp;
	} 
	if (!empty($m_cnfg['ext_oke'])) {
		$upmsg['rules'][] = "File types: " . implode(" ,", $m_cnfg['ext_oke']);
	}
	if ($m_cnfg['max_files'] != 0) {
		// $upmsg['rules'][] = "Simultanious: " . $m_cnfg['max_files'];
	}
	if ($_SERVER["REQUEST_METHOD"] == 'POST' && !empty($_FILES[$m_cnfg['inputname']]['name'])) {
		if (is_writable($m_cnfg['upload_dir'])) {
			$filedir = str_replace("//", "/", $m_cnfg['upload_dir'] .  "/");
			$gdtrue = extension_loaded('gd') ? true : false;
			$gd201 = function_exists('imagecopyresampled') ? true : false;
			$gd2082 = $gd201 && function_exists('imagecreatefromgif') ? true : false;
			$maxup = 1;
			while(list($filenum, $filename) = each($_FILES[$m_cnfg['inputname']]['name'])) { 
				$uptrue = false;
				if (!empty($filename)) {
					$fileparts = pathinfo($filename);
					$fileext = strtolower($fileparts['extension']);
					// filter filename - adjust to needs - replace spaces by
					// _ a-z A-Z - 0-9 _ . allowed - extension length 2-5 chars
					$filename = str_replace("%20", "_",  str_replace(" ", "_",  $filename));
					$uptrue = preg_match("/^[-a-z0-9_\.]+\.[a-z0-9]{2,5}$/i",  $filename) ? true : false;
					$uptrue = $uptrue && $m_cnfg['max_files'] != 0 && $m_cnfg['max_files'] < $maxup ? false : true; 
					$uptrue = $uptrue && (($fileext != "" && in_array($fileext, $m_cnfg['ext_oke'])) || empty($m_cnfg['ext_oke'])) ? true : false;
					$uptrue = $uptrue && ($_FILES['bestanden']['size'][$filenum] < $m_cnfg['max_size'] || $m_cnfg['max_size'] == 0) ? true : false;
					if (!$uptrue) {
						$upmsg['errors'][] = $filename;
					}
				}
				if ($uptrue) {
					$maxup++;
					$newname = "";
					if ($m_cnfg['overwrite'] !== true || $m_cnfg['newname'] != "") { 
						$tmpname = $m_cnfg['newname'] != "" ? $m_cnfg['newname'] : str_replace ("." . $fileext, "", $filename);	
						if ($m_cnfg['newname'] == "timestamp") {
							list($usec) = explode(" ", microtime());
							$tmpname = date('YmdHis') . (string)substr($usec,2,6);
						}
						$fileloc = $filedir . $tmpname . "." . $fileext;
						$newname = $tmpname . "." . $fileext;
						$a = 1;
						if ($m_cnfg['overwrite'] !== true) {
							while (file_exists($fileloc)) { 
								$a++; 
								$fileloc = $filedir . $tmpname . "_" . $a . "." . $fileext; 
								$newname = $tmpname . "_" . $a . "." . $fileext;
							}
						} 
					} else {
						$fileloc = $filedir . $filename; 
					}
					if (move_uploaded_file($_FILES[$m_cnfg['inputname']]['tmp_name'][$filenum], $fileloc)) {
						if ($newname == $filename || $newname == "") {
							$upmsg['uploads'][] = $filename;
						} else {
							$upmsg['uploads'][] = $filename . " as " . $newname;
						}
						if ($gdtrue && in_array($fileext, $m_cnfg['imggd']) && $m_cnfg['imgw'] > 0 && $m_cnfg['imgh'] > 0) {
							list($curw, $curh) = getimagesize($fileloc);	
							$p_x = $curw / $m_cnfg['imgw'];
							$p_y = $curh / $m_cnfg['imgh'];
							if ($p_x > 1 || $p_y > 1) {
								$pfactor = ($p_x > $p_y) ? $pfactor = $p_x : $pfactor = $p_y;
								$neww = round($curw / $pfactor);
								$newh = round($curh / $pfactor);
								$imgorg = false;
								if ($fileext == "jpg" || $fileext =='jpeg') { 
									$imgorg = imagecreatefromjpeg($fileloc);
								} else if ($gd2082 && $fileext == "gif") {  
									$imgorg = imagecreatefromgif($fileloc);
								} else if ($fileext == 'png') {
									$imgorg = imagecreatefrompng($fileloc);
								}
								if ($imgorg) {
									if ($gd201) {
										$imgnew = imagecreatetruecolor($neww, $newh);
										if ($fileext == "gif" || $fileext == "png") {
											$bgcolor = imagecolorallocate($imgorg, 0, 0, 0);
											imagepalettecopy($imgnew, $imgorg);
											imagefill($imgnew, 0, 0, $bgcolor);
											imagecolortransparent($imgnew, $bgcolor);
										}
										imagecopyresampled($imgnew, $imgorg, 0, 0, 0, 0, $neww, $newh, $curw, $curh);
									} else {
										$imgnew = imagecreate($neww, $newh);
										imagecopy($imgnew, $imgorg, 0, 0, 0, 0, $neww, $newh, $curw, $curh);
									}
									imagedestroy($imgorg);
									if ($fileext == 'jpg' || $fileext =='jpeg') { 
										imagejpeg($imgnew, $fileloc, 80);
									} else if ($gd2082 && $fileext == 'gif') {  
										imagegif($imgnew, $fileloc);
									} else if ($fileext == 'png') {
										imagepng($imgnew, $fileloc);
									}
									imagedestroy($imgnew);
									list($neww, $newh) = getimagesize($fileloc);
									array_pop($upmsg['uploads']);
									if ($newname == $filename || $newname == "") {
										$upmsg['uploads'][] = $filename . " - size: " . $neww . "px - " . $newh . "px";
									} else {
										$upmsg['uploads'][] = $filename . " as " . $newname . " - New Size: " . $neww . "px - " . $newh . "px";
									}
								}
							}
						}
					} 
				} 
				if (file_exists($_FILES[$m_cnfg['inputname']]['tmp_name'][$filenum])) {
					unlink($_FILES[$m_cnfg['inputname']]['tmp_name'][$filenum]);
				}
			}
		} else {
			$upmsg['errors'][] = "Dir error: " . $m_cnfg['upload_dir'];
		}
	}
	return $upmsg;
}
?>
<html>
<head>
<title>Upload-multi</title>
<style>
body {
	font-family: arial;
	font-size: 12px;
	margin-left: 50px;
	margin-top: 50px;
}
</style>
</head>
<body>
<script type="text/javascript"><!--
// specify max_files to upload when used apart from upload multi
// 0 = unlimited - adjust in your config also
var max_files = <?php echo $m_cnfg['max_files']; ?>;
var count_files = 1;
function bestanden() { 
	if (max_files == 0 || max_files > count_files) {
		var holder = document.getElementById('bestanden').getElementsByTagName('tr')[0].parentNode; 
		var taginp = document.createElement('input'); 
		taginp.setAttribute('type','file');
		taginp.setAttribute('name','bestanden[]'); 
		var tagtr = document.createElement('tr');
		var tagtd = document.createElement('td');
		var tagspan = document.createElement('span');
		tagspan.style.cursor = 'pointer'; 
		tagspan.onclick = function() { 
			this.parentNode.parentNode.parentNode.removeChild(this.parentNode.parentNode);	
			count_files--;		
		} 
		tagspan.appendChild(document.createTextNode(' Delete')); 
		tagtd.appendChild(taginp);
		tagtd.appendChild(tagspan);
		tagtr.appendChild(tagtd);
		holder.appendChild(tagtr); 
		count_files++;
	} 
}
//--></script> 
<form method="POST" action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" enctype="multipart/form-data">
<table id="bestanden"> 
<tr><td><input type="file" name="bestanden[]"> <span onClick="bestanden()" style="cursor:pointer;">Add</span></td></tr>  
</table> 
<input type="submit" value="Upload">
</form>
<?php 
if (!empty($m_log['rules'])) {
	echo "<b>Upload rules</b>  <br />";
	echo implode("<br />", $m_log['rules']);
}
if (!empty($m_log['uploads'])) {
	echo "<br /><br /><b>Uploaded</b>  <br />";
	echo implode("<br />", $m_log['uploads']);
}
if (!empty($m_log['errors'])) {
	echo "<br /><br /><b>Upload failed for</b> <br />";
	echo implode("<br />", $m_log['errors']);
}
?>
</body>
</html>
 
Moet je dan gewoon niet deze 2 variabelen aan het begin wijzigen?
PHP:
$m_cnfg['overwrite'] = true; // allow files overwrite on true 
$m_cnfg['newname'] = ""; // file rename "" or "timestamp" or set a rename prefix
 
Hoe wijzigen?

Het gaat om een spel, als je een screenshot maakt telt dat spel beginnnend bij 001. Iedereen die zo'n screenshot upload, heeft dus 001. Ik wil dat er achter 001 nog wat komt. Zodat er niks verloren gaat. Van mij mag die ook de hele naam in tekens veranderen. Maakt mij niks uit.:):p
 
Laatst bewerkt:
Nou, zo bijvoorbeeld
PHP:
$m_cnfg['overwrite'] = false; // allow files overwrite on true 
$m_cnfg['newname'] = "img_"; // file rename "" or "timestamp" or set a rename prefix
 
Als ik het goed begrijp maakt die ervan: img_randomnummer?

Of optellend nummer?
 
Als ik het script goed begrijp wordt er een getal er achter gezet.
PHP:
while (file_exists($fileloc)) {  
  $a++;  
  $fileloc = $filedir . $tmpname . "_" . $a . "." . $fileext;  
  $newname = $tmpname . "_" . $a . "." . $fileext;
}
Ik zie dat er al een underscore wordt toegevoegd dus alleen img is voldoende. :)
 
top script!!!

maar het lukt me niet om boven de 2 mb foto te uploaden.

wat is hier aan te doen????

bedankt!!
 
PHP:
$m_cnfg['max_size'] = 2048000; // size per file in bytes - 0 is unlimited

Die aanpassen lijkt me een goed begin?
 
Beste rvf,

Deze vraag stamt al uit 2008.
Mocht je hier verdere vragen over hebben raad ik je aan een eigen vraag te openen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan