RuiGomes 0 Posted January 5, 2011 Report Share Posted January 5, 2011 Boas, No projecto que estou a desenvolver, tenho todas as funções em functions.php e processo as forms em process.php. Tenho uma form para upload de uma fotografia na página carregar.php. A form é processada em process.php, e corre o seguinte código: if($_POST['type']=='carregar') { carregarFoto($_FILES['file']); } Em functions.php: function carregarFoto($file) { if((!empty($file)) && ($file['error'] == 0)) { //Check if the file is JPEG image and it's size is less than 350Kb $filename = basename($file['name']); $ext = substr($filename, strrpos($filename, '.') + 1); if (($ext == "jpg") && ($file["type"] == "image/jpeg") && ($file["size"] < 350000)) { //Determine the path to which we want to save this file $newname = dirname(__FILE__).'/upload/'.$filename; //Check if the file with the same name is already exists on the server if (!file_exists($newname)) { //Attempt to move the uploaded file to it's new place if ((move_uploaded_file($file['tmp_name'],$newname))) { echo "It's done! The file has been saved as: ".$newname; } else { echo "Error: A problem occurred during file upload!"; } } else { echo "Error: File ".$file["name"]." already exists"; } } else { echo "Error: Only .jpg images under 350Kb are accepted for upload"; } } else { echo "Error: No file uploaded"; } } O problema é que não consigo ver o $file['name']. A informação não "passa" do process.php para o functions.php. Link to post Share on other sites
ruimcosta 0 Posted January 5, 2011 Report Share Posted January 5, 2011 Propriedades do $_FILES: $_FILES['file']['name']; $_FILES['file']['tmp_name']; $_FILES['file']['size']; $_FILES['file']['type']; Não esquecer que no <form>, tens de ter <form action="" method="post" enctype="multipart/form-data"> Abraços e beijinhos,Rui Costa Link to post Share on other sites
RuiGomes 0 Posted January 5, 2011 Author Report Share Posted January 5, 2011 Sim, estou a usar esse tipo de form: <form enctype="multipart/form-data" action="process.php" method="POST"> <input type="hidden" name="MAX_FILE_SIZE" value="100000" /> Escolhe uma fotografia: <input name="file" type="file" /><br /> <input type="hidden" name="type" value="carregar" /> <input type="submit" value="Enviar!" /> </form> No process.php tenho carregarFoto($_FILES['file']), ou seja, se a função é carregarFoto($file), então $_FILES['file'] deveria ser igual a $file. No entanto, isto não está a funcionar. Link to post Share on other sites
ruimcosta 0 Posted January 5, 2011 Report Share Posted January 5, 2011 entao faz assim: if($_POST['type']=='carregar') { carregarFoto('file'); } e na função: // em vez de: $filename = basename($file['name']); $filename = $_FILES[$file]['tmp_name']; Abraços e beijinhos,Rui Costa Link to post Share on other sites
RuiGomes 0 Posted January 5, 2011 Author Report Share Posted January 5, 2011 Assim já detecta que é foi enviado um ficheiro, mas o $filename não funciona. A função está assim: function carregarFoto($file) { if((!empty($file)) && ($file['error'] == 0)) { //Check if the file is JPEG image and it's size is less than 350Kb $filename = $_FILES[$file]['tmp_name']; echo $filename; $ext = substr($filename, strrpos($filename, '.') + 1); if (($ext == "jpg") && ($_FILES[$file] == "image/jpeg") && ($_FILES[$file]["size"] < 10240000000)) { //Determine the path to which we want to save this file $newname = dirname(__FILE__).'/upload/'.$filename; //Check if the file with the same name is already exists on the server if (!file_exists($newname)) { //Attempt to move the uploaded file to it's new place if ((move_uploaded_file($file['tmp_name'],$newname))) { echo "It's done! The file has been saved as: ".$newname; } else { echo "Error: A problem occurred during file upload!"; } } else { echo "Error: File ".$file["name"]." already exists"; } } else { echo "Error: Only .jpg images under 350Kb are accepted for upload"; } } else { echo "Error: No file uploaded"; } } Antes dava "No file uploaded", agora dá "only jpg images under 350kb are accepted.". Tentei fazer um echo $filename; e não faz output de nada. Link to post Share on other sites
ruimcosta 0 Posted January 5, 2011 Report Share Posted January 5, 2011 Testado e aprovado: <?php if( $_SERVER["REQUEST_METHOD"] == "POST" ){ function carregarFoto($file) { if((!empty($file)) && ($file['error'] == 0)) { //Check if the file is JPEG image and it's size is less than 350Kb $fnome = $_FILES[$file]['name']; $fext = substr($fnome,-4); $ftemp = $_FILES[$file]['tmp_name']; $fsize = $_FILES[$file]['size']; $fmime = $_FILES[$file]['type']; echo "nome: ".$fnome."<br />"; echo "ext.: ".$fext."<br />"; echo "nome temporário: ".$ftemp."<br />"; echo "tamanho: ".$fsize."<br />"; echo "mime-type: ".$fmime."<br />"; exit; $ext = substr($filename, strrpos($filename, '.') + 1); if (($ext == "jpg") && ($_FILES[$file] == "image/jpeg") && ($_FILES[$file]["size"] < 10240000000)) { //Determine the path to which we want to save this file $newname = dirname(__FILE__).'/upload/'.$filename; //Check if the file with the same name is already exists on the server if (!file_exists($newname)) { //Attempt to move the uploaded file to it's new place if ((move_uploaded_file($file['tmp_name'],$newname))) { echo "It's done! The file has been saved as: ".$newname; } else { echo "Error: A problem occurred during file upload!"; } } else { echo "Error: File ".$file["name"]." already exists"; } } else { echo "Error: Only .jpg images under 350Kb are accepted for upload"; } } else { echo "Error: No file uploaded"; } } carregarFoto("minha_foto"); } ?> <form action="up.php" method="POST" enctype="multipart/form-data"> Foto <input type="file" name="minha_foto" /> <input type="submit" value="Carregar" /> </form> Abraços e beijinhos,Rui Costa Link to post Share on other sites
bmiguel84 0 Posted January 9, 2011 Report Share Posted January 9, 2011 Ruigomes: $filename = $_FILES[$file]['tmp_name']; não seria $filename = $_FILES['file']['tmp_name']; ? Link to post Share on other sites
Cybernavigator 0 Posted January 10, 2011 Report Share Posted January 10, 2011 Não porque ele vai substituir a variável $file por "minha_foto". O que faz com que seja genérico, ele só precisa de passar o nome do field que leva o ficheiro... Melhores cumprimentos,João Lopes***Esta mensagem foi escrita ao abrigo do novo Acordo Ortográfico*** Link to post Share on other sites
bmiguel84 0 Posted January 10, 2011 Report Share Posted January 10, 2011 Cyber, eu tava a falar do código do Ruigomes, que entre o meu post e o teu foi editado... De qualquer forma, não sei se é do meu servidor, mas o código do Rui Costa não me funciona sem alguns ajustes, nomeadamente: $ext = substr($filename, strrpos($filename, '.') + 1); // $filename não é declarado, vai dar um warning, e não se obtém a extensão // acho que seria $fnome no lugar de $filename Depois desta linha corrigida: "Error: Only .jpg images under 350Kb are accepted for upload" Porquê? if (($ext == "jpg") && ($_FILES[$file] == "image/jpeg") && ($_FILES[$file]["size"] < 10240000000)) { /* acho que será: if (($ext == "jpg") && ($_FILES[$file]['type'] == "image/jpeg") && ($_FILES[$file]["size"] < 10240000000)) { */ Ok. A seguir: Notice: Undefined variable: filename in C:\wamp\www\test.php on line 47 Error: File m already exists Mais uma vez, a variável $filename. // trocar $newname = dirname(__FILE__).'/upload/'.$filename; //por $newname = dirname(__FILE__).'/upload/'.$fnome; Seguinte: Error: A problem occurred during file upload! if ((move_uploaded_file($file['tmp_name'],$newname))) { // não podemos usar $file['tmp_name'], pois $file é apenas uma string, e não o ficheiro // trocar para: if (move_uploaded_file($_FILES[$file]['tmp_name'],$newname)) { It's done! The file has been saved as: C:\wamp\www/upload/online_advertising.jpg Dessa forma já funciona no meu localhost Link to post Share on other sites
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now