Annonce

Écrire une réponse

Veuillez écrire votre message et l'envoyer

Cliquez dans la zone sombre de l'image pour envoyer votre message.

Retour

Résumé de la discussion (messages les plus récents en premier)

Gotcha
2007-04-01 21:33:18

Bonsoir,

J'étais parti pour chercher une solution d'upload de photos par fichier compressé.
A la lecture de ce sujet, le bon sens voudrais effectivement l'on fournisse son lot de photos par Email.

C'est au webmaster de s'assurer qu'il possède une boite mail suffisante...
Et si le webmaster ne veut pas voir son Email sur la page de l'upload, il peut toujours signaler que son Email figure dans le bas toute du site, via la phrase "contacter le Webmaster".
Et hop le tour le joué^^

Bien sûr pour contacter le webmaster encore faut-il avoir renseigner la bonne adresse et utiliser l'astuce suivante =>pour_que_l_adresse_mail_du_webmestre_soit_visible_par_tous_sauf_les_bots

gg99
2006-08-17 18:08:54

Voici mon fichier modifié upload.php

Code:

<?php
// +-----------------------------------------------------------------------+
// | PhpWebGallery - a PHP based picture gallery                           |
// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
// | Copyright (C) 2003-2006 PhpWebGallery Team - http://phpwebgallery.net |
// +-----------------------------------------------------------------------+
// | branch        : BSF (Best So Far)
// | file          : $RCSfile$
// | last update   : $Date: 2006-03-15 23:44:35 +0100 (mer, 15 mar 2006) $
// | last modifier : $Author: plg $
// | revision      : $Revision: 1082 $
// +-----------------------------------------------------------------------+
// | This program is free software; you can redistribute it and/or modify  |
// | it under the terms of the GNU General Public License as published by  |
// | the Free Software Foundation                                          |
// |                                                                       |
// | This program is distributed in the hope that it will be useful, but   |
// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
// | General Public License for more details.                              |
// |                                                                       |
// | You should have received a copy of the GNU General Public License     |
// | along with this program; if not, write to the Free Software           |
// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
// | USA.                                                                  |
// +-----------------------------------------------------------------------+
define('PHPWG_ROOT_PATH','./');
include_once( PHPWG_ROOT_PATH.'include/common.inc.php' );
include_once( PHPWG_ROOT_PATH.'include/functions_mail.inc.php');


//------------------------------------------------------------------- functions
// The validate_upload function checks if the image of the given path is valid.
// A picture is valid when :
//     - width, height and filesize are not higher than the maximum
//       filesize authorized by the administrator
//     - the type of the picture is among jpg, gif and png
// The function returns an array containing :
//     - $result['type'] contains the type of the image ('jpg', 'gif' or 'png')
//     - $result['error'] contains an array with the different errors
//       found with the picture
function validate_upload( $temp_name, $my_max_file_size, $my_max_file_size_arch,
                          $image_max_width, $image_max_height )
{
  global $conf, $lang;
        
  $result = array();
  $result['error'] = array();
  //echo $_FILES['picture']['name'];
  $extension = get_extension( $_FILES['picture']['name'] );
  
  if ( in_array($extension, $conf['picture_arch_ext']))
  {
    if ( !isset( $_FILES['picture'] ) )
    {
      // do we even have a file?
      array_push( $result['error'], "You did not upload anything!" );
    }
    else
    {
        if ( $_FILES['picture']['size'] > ($my_max_file_size_arch * 1024 * 1024) )
        {
              array_push( $result['error'],
                      $lang['upload_advise_filesize'].$my_max_file_size_arch.' Mo' );
        }
        else
        {
            if ( !move_uploaded_file( $_FILES['picture']['tmp_name'], $temp_name ) )
            {
                array_push( $result['error'], $lang['upload_cannot_upload'] );
            }

        }
            $result['type'] = 'zip';
     }
  }
  else
  {
    if (!in_array($extension, $conf['picture_ext']))
    {
      array_push( $result['error'], $lang['upload_advise_filetype'] );
      return $result;
    }
    if ( !isset( $_FILES['picture'] ) )
    {
      // do we even have a file?
      array_push( $result['error'], "You did not upload anything!" );
    }
    else if ( $_FILES['picture']['size'] > $my_max_file_size * 1024 )
    {
      array_push( $result['error'],
                  $lang['upload_advise_filesize'].$my_max_file_size.' KB' );
    }
    else
    {
      // check if we are allowed to upload this file_type
      // upload de la photo sous un nom temporaire
      if ( !move_uploaded_file( $_FILES['picture']['tmp_name'], $temp_name ) )
      {
        array_push( $result['error'], $lang['upload_cannot_upload'] );
      }
      else
      {
        $size = getimagesize( $temp_name );
        if ( isset( $image_max_width )
             and $image_max_width != ""
             and $size[0] > $image_max_width )
        {
          array_push( $result['error'],
                      $lang['upload_advise_width'].$image_max_width.' px' );
        }
        if ( isset( $image_max_height )
             and $image_max_height != ""
             and $size[1] > $image_max_height )
        {
          array_push( $result['error'],
                      $lang['upload_advise_height'].$image_max_height.' px' );
        }
        // $size[2] == 1 means GIF
        // $size[2] == 2 means JPG
        // $size[2] == 3 means PNG
        switch ( $size[2] )
        {
        case 1 : $result['type'] = 'gif'; break;
        case 2 : $result['type'] = 'jpg'; break;
        case 3 : $result['type'] = 'png'; break;
        default :
          array_push( $result['error'], $lang['upload_advise_filetype'] );  
        }
      }
    }
  } // else Picture ZIP Archive
  if ( sizeof( $result['error'] ) > 0 )
  {
    // destruction de l'image avec le nom temporaire
    @unlink( $temp_name );
  }
  else
  {
    @chmod( $temp_name, 0644);
  }
  return $result;
}   

//-------------------------------------------------- access authorization check
if (is_numeric($_GET['cat']))
{
  $page['cat'] = $_GET['cat'];
}

if (isset($page['cat']))
{
  check_restrictions( $page['cat'] );
  $result = get_cat_info( $page['cat'] );
  $page['cat_dir']        = get_complete_dir( $page['cat'] );
  $page['cat_site_id']    = $result['site_id'];
  $page['cat_name']       = $result['name'];
  $page['cat_uploadable'] = $result['uploadable'];
  
  if (url_is_remote($page['cat_dir']) or !$page['cat_uploadable'])
  {
    die('Fatal: you take a wrong way, bye bye');
  }
}

$error = array();
$page['upload_successful'] = false;
if ( isset( $_GET['waiting_id'] ) )
{
  $page['waiting_id'] = $_GET['waiting_id'];
}
//-------------------------------------------------------------- picture upload
// verfying fields
if ( isset( $_POST['submit'] ) and !isset( $_GET['waiting_id'] ) )
{
  $path = $page['cat_dir'].$_FILES['picture']['name'];
  if ( @is_file( $path ) )
  {
    array_push( $error, $lang['upload_file_exists'] );
  }
  // test de la présence des champs obligatoires
  if ( empty($_FILES['picture']['name']))
  {
    array_push( $error, $lang['upload_filenotfound'] );
  }
  if ( empty($_POST['username']) )
  {
    array_push( $error, $lang['upload_err_username'] );
  }
  
  $date_creation = '';
  if ( !empty($_POST['date_creation']) )
  {
    list( $day,$month,$year ) = explode( '/', $_POST['date_creation'] );
    // int checkdate ( int month, int day, int year)
    if (checkdate($month, $day, $year))
    {
      $date_creation = $year.'-'.$month.'-'.$day;
    }
    else
    {
      array_push( $error, $lang['err_date'] );
    }
  }
  // creation of the "infos" field :
  // <infos author="Pierrick LE GALL" comment="my comment"
  //        date_creation="2004-08-14" name="" />
  $xml_infos = '<infos';
  $xml_infos.= encodeAttribute('author', $_POST['author']);
  $xml_infos.= encodeAttribute('comment', $_POST['comment']);
  $xml_infos.= encodeAttribute('date_creation', $date_creation);
  $xml_infos.= encodeAttribute('name', $_POST['name']);
  $xml_infos.= ' />';

  if ( !preg_match( '/^[a-zA-Z0-9-_.]+$/', $_FILES['picture']['name'] ) )
  {
    array_push( $error, $lang['update_wrong_dirname'] );
  }
  
  if ( sizeof( $error ) == 0 )
  {
    $result = validate_upload( $path, $conf['upload_maxfilesize'], $conf['upload_maxfilesize_arch'],
                               $conf['upload_maxwidth'],
                               $conf['upload_maxheight']  );
    for ( $j = 0; $j < sizeof( $result['error'] ); $j++ )
    {
      array_push( $error, $result['error'][$j] );
    }

 }

  if ( sizeof( $error ) == 0 )
  {
    $query = 'insert into '.WAITING_TABLE;
    $query.= ' (storage_category_id,file,username,mail_address,date,infos)';
    $query.= ' values ';
    $query.= '('.$page['cat'].",'".$_FILES['picture']['name']."'";
    $query.= ",'".htmlspecialchars( $_POST['username'], ENT_QUOTES)."'";
    $query.= ",'".$_POST['mail_address']."',".time().",'".$xml_infos."')";
    $query.= ';';
    pwg_query( $query );
    $page['waiting_id'] = mysql_insert_id();
    $page['upload_successful'] = true;

    $sujet = "Ajout d'une nouvelle Photo";
    $message = "";
    $message .= " Nom : \t  \t $username \n";
    $message .= " Photo :   \t $path \n";

    pwg_mail( $conf['webmaster_mail'] , '' , $sujet, $message );
  }
}

//
// Start output of page
//
$title= $lang['upload_title'];
include(PHPWG_ROOT_PATH.'include/page_header.php');
$template->set_filenames(array('upload'=>'upload.tpl'));

$u_form = PHPWG_ROOT_PATH.'upload.php?cat='.$page['cat'];
if ( isset( $page['waiting_id'] ) )
{
$u_form.= '&amp;waiting_id='.$page['waiting_id'];
}

if ( isset( $page['waiting_id'] ) )
{
  $advise_title=$lang['upload_advise_thumbnail'].$_FILES['picture']['name'];
}
else
{
  $advise_title = $lang['upload_advise'];
  $advise_title.= get_cat_display_name($page['cat_name']);
}

$username = !empty($_POST['username'])?$_POST['username']:$user['username'];
$mail_address = !empty($_POST['mail_address'])?$_POST['mail_address']:@$user['mail_address'];
$name = !empty($_POST['name'])?$_POST['name']:'';
$author = !empty($_POST['author'])?$_POST['author']:'';
$date_creation = !empty($_POST['date_creation'])?$_POST['date_creation']:'';
$comment = !empty($_POST['comment'])?$_POST['comment']:'';

$template->assign_vars(
  array(
    'ADVISE_TITLE' => $advise_title,
    'NAME' => $username,
    'EMAIL' => $mail_address,
    'NAME_IMG' => $name,
    'AUTHOR_IMG' => $author,
    'DATE_IMG' => $date_creation,
    'COMMENT_IMG' => $comment,
    
    'L_TITLE' => $lang['upload_title'],
    'L_USERNAME' => $lang['upload_username'],
    'L_EMAIL' =>  $lang['mail_address'], 
    'L_NAME_IMG' =>  $lang['upload_name'], 
    'L_SUBMIT' =>  $lang['submit'],
    'L_AUTHOR' =>  $lang['upload_author'], 
    'L_CREATION_DATE' =>  $lang['upload_creation_date'], 
    'L_COMMENT' =>  $lang['comment'],
    'L_RETURN' =>  $lang['home'],
    'L_RETURN_HINT' =>  $lang['home_hint'],
    'L_UPLOAD_DONE' =>  $lang['upload_successful'],
    'L_MANDATORY' =>  $lang['mandatory'],
    
    'F_ACTION' => $u_form,

    'U_RETURN' => make_index_url(array('category' => $page['cat'])),
    )
  );

if ( !$page['upload_successful'] )
{
  $template->assign_block_vars('upload_not_successful',array());
//-------------------------------------------------------------- errors display
  if ( sizeof( $error ) != 0 )
  {
    $template->assign_block_vars('upload_not_successful.errors',array());
    for ( $i = 0; $i < sizeof( $error ); $i++ )
    {
      $template->assign_block_vars('upload_not_successful.errors.error',array('ERROR'=>$error[$i]));
    }
  }


//--------------------------------------------------------------------- advises
  if ( !empty($conf['upload_maxfilesize']) )
  {
    $content = $lang['upload_advise_filesize'];
    $content.= $conf['upload_maxfilesize'].' KB';
    $template->assign_block_vars('upload_not_successful.advise',array('ADVISE'=>$content));
  }

  if ( isset( $page['waiting_id'] ) )
  {
    if ( $conf['upload_maxwidth_thumbnail'] != '' )
    {
      $content = $lang['upload_advise_width'];
      $content.= $conf['upload_maxwidth_thumbnail'].' px';
      $template->assign_block_vars('upload_not_successful.advise',array('ADVISE'=>$content));
    }
    if ( $conf['upload_maxheight_thumbnail'] != '' )
    {
      $content = $lang['upload_advise_height'];
      $content.= $conf['upload_maxheight_thumbnail'].' px';
      $template->assign_block_vars('upload_not_successful.advise',array('ADVISE'=>$content));
    }
  }
  else
  {
    if ( $conf['upload_maxwidth'] != '' )
    {
      $content = $lang['upload_advise_width'];
      $content.= $conf['upload_maxwidth'].' px';
      $template->assign_block_vars('upload_not_successful.advise',array('ADVISE'=>$content));
    }
    if ( $conf['upload_maxheight'] != '' )
    {
      $content = $lang['upload_advise_height'];
      $content.= $conf['upload_maxheight'].' px';
      $template->assign_block_vars('upload_not_successful.advise',array('ADVISE'=>$content));
    }
  }
  $template->assign_block_vars('upload_not_successful.advise',array('ADVISE'=>$lang['upload_advise_filetype']));
  $template->assign_block_vars('upload_not_successful.advise',array('ADVISE'=>$lang['upload_advise_name']));
  $content = $lang['upload_advise_archive'];
  $content.= $conf['upload_maxfilesize_arch'].' Mo';
  //$template->assign_block_vars('upload_not_successful.advise',array('ADVISE'=>$content));

  
//----------------------------------------- optionnal username and mail address
  if ( !isset( $page['waiting_id'] ) )
  {
    $template->assign_block_vars('upload_not_successful.fields',array());
    $template->assign_block_vars('note',array());
  }
}
else
{
  $template->assign_block_vars('upload_successful',array());
}


//----------------------------------------------------------- html code display
$template->parse('upload');
include(PHPWG_ROOT_PATH.'include/page_tail.php');
?>

c'est avec ces modifs que j'ai une erreur lors de l'upload d'un fichier zip meme de petite taille...

si vous avez des remarques ... je suis preneur :-)

laurent.duretz
2006-08-17 11:07:52

gg99 a écrit:

C'est vrai que ca peut etre une solution, mais le fait de mettre une adresse email sur une page d'un site internet est pour moi, à eviter ( pb de SPAM entre autre ). Et tout le monde n'est pas sous Gmail, ou avec une grosse capacité d'emission ou de reception ( en général c'est limité à 5 Mo , au mieux 10 Mo ) sans compter qu'il faut vite supprimer le mail au cas ou il sature la boite webmail ... bref ca rend fastidieux l'envoi de photos. Déja la creation de zip pour certaines personnes est un problème ... ;-)
Je pense qu'on peut faire une solution plus simple et ergonomique.

Ce sont les contraintes de tous les hébergeurs. Quel que soit la méthode utilisée (mail, ftp, upload) il y aura des contraintes liées à l'hébergeur. Des contraintes de temps, de volume, de liberté de configuration...
L'envoi de mail me semble le plus simple pour l'utilisateur débutant. Même sur une boîte aux lettres free, un filtre sur un sujet de mail connu évite tout problème de spam (voir la doc mfilter de free).

gg99 a écrit:

Le plus bizarre est que je peux mettre un fichier image de 1,5 Mo sans problème. J'ai vu le paramètre "post_max_size = 2M". Je ne sais pas si cela est modifiable chez Free, j'ai trouver deux methodes qu'il me faudra essayer.

Je pense que ce paramètre n'est pas modifiable chez free à cause du safe_mode=on (à vérifier)

gg99
2006-08-17 10:24:06

laurent.duretz a écrit:

Pour ça, l'envoi de mail répond au besoin. La page d'uplod peut-être modifiée pour y intégrer une phrase du genre "si vous souhaitez envoyer plus d'une photo envoyez moi un mail à cette adresse anti-spam@free.fr"

C'est vrai que ca peut etre une solution, mais le fait de mettre une adresse email sur une page d'un site internet est pour moi, à eviter ( pb de SPAM entre autre ). Et tout le monde n'est pas sous Gmail, ou avec une grosse capacité d'emission ou de reception ( en général c'est limité à 5 Mo , au mieux 10 Mo ) sans compter qu'il faut vite supprimer le mail au cas ou il sature la boite webmail ... bref ca rend fastidieux l'envoi de photos. Déja la creation de zip pour certaines personnes est un problème ... ;-)
Je pense qu'on peut faire une solution plus simple et ergonomique.

laurent.duretz a écrit:

Là, il faut regarder la config du serveur apache. je pense que la taille maximum de données envoyées par POST est paramétrable.

Le plus bizarre est que je peux mettre un fichier image de 1,5 Mo sans problème. J'ai vu le paramètre "post_max_size = 2M". Je ne sais pas si cela est modifiable chez Free, j'ai trouver deux methodes qu'il me faudra essayer.


laurent.duretz a écrit:

Dans la fenêtre de post, just sous le message, il y a un lien BBCode qui donne les infos utiles pour la rédaction des messages.

Ok je regarde pour le mettre ici ce soir,


anti-spam applied

laurent.duretz
2006-08-17 10:01:46

gg99 a écrit:

Bonjour,

En fait mon but est de permettre aux utilisateurs du site de m'envoyer leurs photos ( au pluriel ) sans passer par lapage upload pour chaque photo. D'ou de l'ergonomie, car c'est une tache qui peut touner pendant qu'ils font autre chose ou qu'ils ne sont tout simplement pas devant leur ordi.

J'ai vu les discussions sur le sujet et en attendant une fonction réelle de PWG, ca me semblait etre un paliatif intéressant.
Ceci dit, le dezippage sur le serveur n'est pas a mon avis une obligation, je peux le faire moi-meme sur mon PC apres avoir recuperer l'archive.

Pour ça, l'envoi de mail répond au besoin. La page d'uplod peut-être modifiée pour y intégrer une phrase du genre "si vous souhaitez envoyer plus d'une photo envoyez moi un mail à cette adresse anti-spam@free.fr"

gg99 a écrit:

En travaillant sur le fichier upload.php, meme si maintenant il accepte des fichiers avec extension .zip ou .ZIP de taille max de 25Mo, j'ai une belle page d'erreur #500 à la fin du chargement d'un zip de 600ko !!! Ca ne ressemble en effet pas a un time out du langage php.

Info surement utile, je suis chez Free.

Là, il faut regarder la config du serveur apache. je pense que la taille maximum de données envoyées par POST est paramétrable.

gg99 a écrit:

Si besoin je peux envoyer mes modifs mais je ne sais pas comment les intégrer à un post dans une fenêtre specifique ... :-/

A plus,

Dans la fenêtre de post, just sous le message, il y a un lien BBCode qui donne les infos utiles pour la rédaction des messages.

anti-spam applied

gg99
2006-08-17 09:48:35

Bonjour,

En fait mon but est de permettre aux utilisateurs du site de m'envoyer leurs photos ( au pluriel ) sans passer par lapage upload pour chaque photo. D'ou de l'ergonomie, car c'est une tache qui peut touner pendant qu'ils font autre chose ou qu'ils ne sont tout simplement pas devant leur ordi.

J'ai vu les discussions sur le sujet et en attendant une fonction réelle de PWG, ca me semblait etre un paliatif intéressant.
Ceci dit, le dezippage sur le serveur n'est pas a mon avis une obligation, je peux le faire moi-meme sur mon PC apres avoir recuperer l'archive.

En travaillant sur le fichier upload.php, meme si maintenant il accepte des fichiers avec extension .zip ou .ZIP de taille max de 25Mo, j'ai une belle page d'erreur #500 à la fin du chargement d'un zip de 600ko !!! Ca ne ressemble en effet pas a un time out du langage php.

Info surement utile, je suis chez Free.

Si besoin je peux envoyer mes modifs mais je ne sais pas comment les intégrer à un post dans une fenêtre specifique ... :-/

A plus,

flipflip
2006-08-16 17:44:09

Le but n'est pas forcément de décompresser l'archive. Ca pourrait tout simplement servir à fournir un zip qui  contient une série d'image, par exemple j'ai l'album toto avec 50 photos et un fichier zip qui contient la totalité des images. Comme ça pas besoin d'enregistrer images par images.

laurent.duretz
2006-08-16 16:08:50

flipflip a écrit:

Par upload d'un fichier zip, d'après la phrase, c'est juste l'envoi et non l'envoi plus la décompression. En ce qui concerne l'upload je pense qu'il n'échappe pas à la règle du timeout.

Je ne vois que peu d'intérêt à télécharger une archive ci celle-ci n'est pas désarchivée dans la foulée afin de traiter les imeges qu'elle contient.

Pour le timeout et après lecture de la doc PHP (chap "CXII. Options PHP et informations", c'est la variable max_input_time qui détermine le temps d'exécution maximum de l'envoi d'informations par la méthode GET ou POST.

flipflip
2006-08-16 15:17:20

Par upload d'un fichier zip, d'après la phrase, c'est juste l'envoi et non l'envoi plus la décompression. En ce qui concerne l'upload je pense qu'il n'échappe pas à la règle du timeout.

laurent.duretz
2006-08-16 15:08:15

Bonjour,

Lorsqu'on souhaite envoyer une archive ZIP au serveur, plusieurs conditions sont déterminantes :
1) la taille maximum de l'archive (configurée sur le serveur)
2) le support de la compression zip par PHP

Pour ce qui est du temps de téléchargement, je ne pense pas que cela ait une importance vis-à-vis du temps maximum d'exécution d'un script car le script en question n'est exécuté qu'à la fin de l'upload (cela reste à vérifier).

Pour la compression zip, il est rare de voir un serveur PHP inclure les fonctions zip. Pour ma part, je compresse en tar.gz avec le compresseur gzip et l'archiveur tar et cela pour 2 raisons:
a) Les fonctions gzip existent nativement en PHP et sont donc présentes sur beaucoup plus de serveurs.
b) Le format TAR est facilement lisible en PHP et j'ai déjà du code qui permet de désarchiver.

Enfin la fonction validate_upload() dans le fichier upload.php me semble modifiable pour pouvoir traiter un fichier d'archive.

flipflip
2006-08-14 13:00:41

C'est surement faisable mais est ce que le temps de transférer tes 10mo ne va pas être trop long. Tu va surement obtenir un timeout de la part du serveur.

gg99
2006-08-14 12:31:23

Bonjour,

J'aimerais modifier le upload.php pour pouvoir accepter des ZIPs de photos ( pouvant faire une dizaine mega par exemple ).
Y a  t il une solution "simple" ?
Quelqu'un la déja fait ?

Merci

Pied de page des forums

Propulsé par FluxBB

github twitter newsletter Faire un don Piwigo.org © 2002-2024 · Contact