¿como limitar tamaño de los archivos a subir?

Hola a tod@s, ¿alguien podría indicarme un buen tuto o manual que explique claramente como hacer para limitar el tamaño y le tipo de los archivos a subir a mysql?
Me explico, gracias a cesar_ed tengo un archivo que me sube img a una carpeta y me guarda el nombre y la url a mi bbdd.
Pues bien lo que quiero es que solo se puedan subir archivos jpeg, jpg, png y gif y no superiores a 1Mb.
Gracias.
Lo mejor de caerse al tropezar, es volverse a levantar.
Hola:

En el formulario HTML añade un input así:

<form action='script' method='post' enctype='multipart/form-data'>
  <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
  <input type="file" name="archivo" />
</form>

Y, además, valida el tamaño en PHP así:

if( $_FILES['archivo']['size'] > 1000000 ) {
  echo "No se pueden subir archivos con pesos mayores a 1MB";
} else {
  // tu código.
}

Saludos.
Gracias skaparate, lo probaré. Aunque he encontrado una pagina que lo explica claramente aqui
Lo mejor de caerse al tropezar, es volverse a levantar.
Bueno pues lo probé skaparate y funca, añadí algo y me quedó asi:
$tipos = array("image/gif","image/jpeg","image/jpg","image/png"); //Aqui eligo el tipo de archivo (bien)
$maximo = 5500000; //4.8 Mb esto es para probar
if(!is_uploaded_file($_FILES["imagen"]["tmp_name"]))
{
echo "Error al subir archivo";
}
else {
if (in_array($_FILES["imagen"]["type"],$tipos) && $_FILES["imagen"]["size"] <= $maximo)  //Funciona a las mil maravillas
{ 
Trabajo en local.
Pero ahora tengo un problemon. Cuando hago la consulta a mysql, esta no me devuelve las imagenes cuyo nombre tienen espacios.
Mira este es el codigo de subidas de imagenes:
include("conect.php");
$nombre = explode(".",$_FILES["imagen"]["name"]);
$peticion = mysql_query("INSERT INTO imagenes(nombre,url,nick) VALUES('".$nombre[0]."','subidas/".($_FILES["imagen"]["name"])."','".$_SESSION["usuario"]."')") or die(mysql_error());
move_uploaded_file(($_FILES["imagen"]["tmp_name"]),"subidas/".($_FILES["imagen"]["name"]));	
}	
$verificar = mysql_query("SELECT * FROM imagenes ORDER BY imagen_id DESC LIMIT 0,1");
$numeros = mysql_num_rows($verificar);
if($numeros <= 0)
{
echo "<b style='color: red;'>No se han encontrado imagenes<br/>";
echo "Revisa la extencion o el tamaño del archivo</b></style>";
}
else {
echo "<h3>Esta es la imagen subida: </h3>";
if($imagen = mysql_fetch_array($verificar))
{ 
echo  "<center><table><tr><td><img src=".$imagen['url']."></td></tr></table></center>";
echo "<hr/>";
echo "<a href='tus_img.php'><h3>Ver tus imagenes.</h3></a>|<a href='mostrar_todas_Img.php'><h3>Ver todas las imagenes</h3></a>";
}
else {
echo "Error en la subida";
}
}
}
Y no se que hacer, ¿podeis ayudarme?
Lo mejor de caerse al tropezar, es volverse a levantar.
Lo más simple es reemplazar los espacios por guiones (-), guiones bajos (_) o quitar el espacio y dejar todo junto al mover los archivos al servidor (del temporal al definitivo):

function replace_latin_chars( $str, $space = '_' ) {
  if( empty( $str ) || ! is_string( $str ) || ! is_string( $space ) ) {
    echo "Invalid or unsupported type. Only strings are supported.";
    return;
  }
			
  $chars = array( '/á|ä/', '/Á|Ä/', '/é|ë/', '/É|Ë/', '/í|ï/', '/Í|Ï/', '/ó|ö/', '/Ó|Ö/', '/ú|ü/', '/Ú|Ü/', '/ñ/', '/Ñ/', '/\s/' );
  $replace = array( 'a', 'A', 'e', 'E', 'i', 'I', 'o', 'O', 'u', 'U', 'gn', 'GN', $space );
		
  return preg_replace( $chars, $replace, $str );
}

Esa función la hice especialmente para reemplazar los caracteres latinos que generalmente causan problemas con los archivos. Se usa así:

$nombre_imagen = 'foto en el lago.png';
$nombre_imagen = replace_latin_chars( $nombre_imagen, '-' ); // Para eliminar el espacio y dejar todo junto, en lugar de '-' escribe '' como segundo parámetro.

// te mostrará foto-en-el-lago.png
echo $nombre_imagen;

¿Se entiende? Si no entiendes algo pregunta :P.

Saludos.
Lo he probado y no me funciona. Estaré haciendo algo mal.
Lo he intentado con
$nombre = ($_FILES['imagen']['name']);
$nombre = str_replace(" ","_",$nombre);
y consigo unir el nombre de la imagen en el campo "nombre" de la bbdd. Pero cuando le doy el valor
'subidas'/.$nombre
al campo url de la bbdd, me sube Array.
Y si le dio valor
 'subidas'/.($_FILES['imagen']['name'])
no me muestra la imagen.
Lo mejor de caerse al tropezar, es volverse a levantar.
Vale lo he conseguido.
Por fin tanto el nombre de la imagen (mi_foto.jpg) como la url donde se archiva la imagen (subidas/mi_foto.jpg), se suben a mi bbdd correctamente.
<?
$tipos = array("image/gif","image/jpeg","image/jpg","image/png");
$maximo = 5500000; //3.8 Mb
if(!is_uploaded_file($_FILES["imagen"]["tmp_name"]))
{
echo "Error al subir archivo";
}
else {
if (in_array($_FILES["imagen"]["type"],$tipos) && $_FILES["imagen"]["size"] <= $maximo)
{ 
include("conect.php");
$nombre = ($_FILES["imagen"]["name"]);
$nombre = str_replace(" ","_",$nombre);
$nombre = explode("/",$nombre);
$peticion = mysql_query("INSERT INTO imagenes(nombre,url,nick) VALUES('".$nombre[0]."','subidas/".$nombre[0]."','".$_SESSION["usuario"]."')") or die(mysql_error());
move_uploaded_file(($_FILES["imagen"]["tmp_name"]),"subidas/".$nombre[0]);	
}	
$verificar = mysql_query("SELECT * FROM imagenes ORDER BY imagen_id DESC LIMIT 0,1");
$numeros = mysql_num_rows($verificar);
if($numeros <= 0)
{
echo "<b style='color: red;'>No se han encontrado imagenes<br/>";
echo "Revisa la extencion o el tamaño del archivo</b></style>";
}
else {
echo "<h3>Esta es la imagen subida: </h3>";
if($imagen = mysql_fetch_array($verificar))
{ 
echo  "<center><table><tr><td><img src=".$imagen['url']."></td></tr></table></center>";
echo "<hr/>";
echo "<a href='tus_img.php'><h3>Ver tus imagenes.</h3></a>|<a href='mostrar_todas_Img.php'><h3>Ver todas las imagenes</h3></a>";
}
else {
echo "Error en la subida";
}
}
}
pie("<a href='".$_SERVER['HTTP_REFERER']."'>Volver</a>","<a href='logout.php'>Logout</a>");
?>
O casi, pues no se porqué no aparece la 1ª letra del nombre. Aparece así (i_foto.jpg) RARO, RARO, RARO
Lo mejor de caerse al tropezar, es volverse a levantar.
¿Puedes ver el nombre (url) de la imagen en la base de datos? Cuando lo veas podrás saber cuál es el error (o publícalo para verlo).
Si, ya te digo, si eso es lo RARO, RARO, RARO, que tanto en la bbdd como en la carpeta donde se guarda, desaparece el pirmer caracter del nombre del archivo.
¿[:(][:(][:(]?
Lo mejor de caerse al tropezar, es volverse a levantar.
Mira prueba esto y veras lo que digo :
form.html
<h2>Elige la imagen a subir</h2>
<form action="subir.php"  enctype="multipart/form-data" method="post">
<input type="file" name="imagen" />
<br/>
<input type="submit" value="subir" />
</form>
subir.php
<?php  
if(!is_uploaded_file($_FILES['imagen']['tmp_name']))
   {
    echo "Error al subir archivo";
    }
    else {
   include("conecta.php");
    $nombre = explode(".",$_FILES['imagen']['name']);
    $peticion = mysql_query("INSERT INTO imagenes(nombre,url) VALUES('".$nombre[0]."','subidas/".$_FILES['imagen']['name']."')") or die(mysql_error());
    move_uploaded_file(($_FILES['imagen']['tmp_name']),"subidas/".$_FILES['imagen']['name']);
    echo "Se ha subido correctamente tu imagen";
		
		$verificar = mysql_query("SELECT * FROM imagenes ORDER BY imagen_id DESC LIMIT 0,1");
	$numeros = mysql_num_rows($verificar);
	if($numeros <= 0)
	{
	 echo "No se han encontrado imagenes";
	 }
	 else {
	    echo "<center>Esta es la imagen subida: </center><br>";
	    if($imagen = mysql_fetch_array($verificar))
		{ 
	    echo  "<center><img src=".$imagen['url']."></center>";
		}
			 else {
			 echo "Error en la subida";
			 }
	      }
         }
		?>

Desaparece la primera letra del nombre.
Lo mejor de caerse al tropezar, es volverse a levantar.
A mi sí me funcionó :P.

La imagen que probé se llamaba business_activity.jpg; el charset (collation) de la tabla (imagenes) es utf8_bin_ci (ci = case insensitive). Utilicé el mismo form que me enviaste:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
	<h2>Elige la imagen a subir</h2>
		<form action="subir.php"  enctype="multipart/form-data" method="post">
		<input type="file" name="imagen" />
		<br/>
		<input type="submit" value="subir" />
		</form>
</body>
</html>

Obviamente modifiqué mi información para que fuera igual.
Pues no se, yo no tengo charset y lo pongo en varchar. Y ¿usaste el mismo archivo subir.php? Porque si es así tendré que probar online, quizas haya modificado algo de php.ini sin darme cuenta.
Gracias
Lo mejor de caerse al tropezar, es volverse a levantar.
Sí, utilicé el mismo archivo subir.php.

yo no tengo charset y lo pongo en varchar

Si la columna no tiene "collation", entonces se utiliza la de la base de datos, que si no la especificaste de otra forma, es utf8_bin. ¿Estas utilizando Windows o Linux? ¿Las imágenes se mueven a la carpeta "subidas"?
Creo que la bbdd está bien, tengo "character set database-latin1", "character set filesystem-binary", "utf8_bin" y la carpeta por supuesto "subidas".
Mi siso es "windows" y el server "wamp", que creo es linux.
Sigo creyendo que he tocado algo del wamp sin darme cuenta.
Lo mejor de caerse al tropezar, es volverse a levantar.
Puede ser que tenga que ver con Wamp (Wamp = Windows Apache MySQL PHP mientras que LAMP = Linux Apache MySQL PHP). Si no es mucho problema, podrías intentar reinstalar WAMP o instalar Xampp
Tendré que probar a reinstalarlo, aver si está el fallo ahí.
Lo mejor de caerse al tropezar, es volverse a levantar.
Por fin. Efectivamente tenía algo mal en php.ini, no se el que. Pero he reinstalado el wamp, he aumentado en php.ini el tamaño de los archivos a subir y el tamaño de los archivos a recibir en mysql y todo parece ir a la perfeccion.
SOLUCIONAO [:p] [:p]
Gracias skaparate
Lo mejor de caerse al tropezar, es volverse a levantar.
Aaaaah no se me había ocurrido que tenía que ver con el límite de subida XD. Creo que inicialmente se permite hasta 1MB :P. En fin, que bueno que lo resolviste :D.

Saludos.
No el error no estaba en el limite, (que por default es 3M). Es que con anterioridad estube trasteando cosas en php.ini para intentar convertir wamp en un servidor web, y algo toqué incorrectamente.