2014-09-08 6 views
0

그래서 여기 코드는 내가 시스템 타트를 허용 할 수 있습니다. 관리자는 기사를 쓰기 만하면 uplod 사진을 쓸 수 있습니다. 기사를 작성하고 게시 할 때 괜찮습니다. 그것을 게시 내가 오류가있다 정의되지 않은 함수를 호출하십시오 finfo_open() line 43정의되지 않은 함수 finfo_open() 줄 43을 호출하십시오.

<?php 

    // RECUPERATION DES DONNEES DU FORMULAIRE 
    // photo 
     $newsPhotoAvant   = (isset($_POST['newsPhotoAvant']))?  formatage_from_post($_POST['newsPhotoAvant']) : ''; 
     $newsPhotoDelete  = (isset($_POST['newsPhotoDelete']))?  formatage_from_post($_POST['newsPhotoDelete']) : ''; 
     $newsPhotoLargeur  = (isset($_POST['newsPhotoLargeur']))?  formatage_from_post($_POST['newsPhotoLargeur']) : ''; 

    // ----------------- 
    // Gestion des photos supprimees 
    if ($newsPhotoAvant!='' && $newsPhotoDelete=='ON') 
    { 
     // Suppression de l'ancienne Photo 
     if(file_exists('../../'.REP_NEWS_PHOTO.$newsPhotoAvant)) { 
      unlink('../../'.REP_NEWS_PHOTO.$newsPhotoAvant); 
     } 
     // ----------------- 
     // Suppression dans la base de donnees par UPDATE 
     $update_query   = "UPDATE ".$NEWS_TABLE." ". 
           " SET news_photo = '' ". 
           " WHERE news_id  = :newsId;"; 
     try { 
     $pdo_update    = $pdo->prepare($update_query); 
     $pdo_update->bindValue(':newsId',  $newsId,  PDO::PARAM_INT); 
     $pdo_update->execute(); 
     } catch (PDOException $e) { echo 'Erreur SQL : '. $e->getMessage().'<br/>'; die(); } 
     // ----------------- 
    } 

    // ---------------------------------- 
    // VERIFICATION/TRAITEMENT de la photo si uploadee 
    // ---------------------------------- 
    $msgErreurPhoto    = ''; // message d erreur 
    $traiterPhotoOK    = true; // (par defaut) 

    if(isset($_FILES['newsPhoto']) && $_FILES['newsPhoto']['size']>0) 
    { 
     // ------------------------------------- 
     // extension du fichier uploadé (en minuscule) 
     $file_Extension   = strtolower(pathinfo($_FILES['newsPhoto']['name'],PATHINFO_EXTENSION)); 

     // Type MIME réel du fichier (important : évite les fichiers NON valides, dont l'extension a été renommée) 
    // $finfo     = new finfo(FILEINFO_MIME_TYPE, NULL); // Retourne le type mime 
    // $file_MimeType   = $finfo->file($_FILES['newsPhoto']['tmp_name']); 

     // (alternative, si la CLASS finfo n'est pas supportée) 
     $finfo     = finfo_open(FILEINFO_MIME_TYPE); // Retourne le type mime à la extension mimetype 
     $file_MimeType   = finfo_file($finfo, $_FILES['newsPhoto']['tmp_name']); 
     finfo_close($finfo); 

     // ------------------------------------- 
     // GESTION DES ERREURS 
     // ------------------------------------- 
     // on vérifie les RESTRICTIONS sur les fichiers 
     if (UPLOAD_ERR_OK<>0 && UPLOAD_ERR_FORM_SIZE==2) { 
      $msgErreurPhoto  .= 'Taille de fichier trop important ('.FILE_SIZEMAX_PHOTO.' octets)<br />'; 
      $traiterPhotoOK  = false; 
     } 
     // ----------------- 
     // on vérifie la TAILLE MAXI 
     elseif ($_FILES['newsPhoto']['size'] > FILE_SIZEMAX_PHOTO) { 
      $msgErreurPhoto  .= 'Taille de fichier supérieure à la taille maxi autorisée ('.FILE_SIZEMAX_PHOTO.' octets)<br />'; 
      $traiterPhotoOK  = false; 
     } 
     // ----------------- 
     // on vérifie l'EXTENSION 
     elseif(!in_array($file_Extension, explode(',', constant('FILE_EXTENSION_PHOTO')))) { 
      $msgErreurPhoto  .= 'L\'extension ne correspond pas (Extensions acceptées : <b>'.constant('FILE_EXTENSION_PHOTO').'</b>)<br />'; 
      if(in_array($file_MimeType, explode(',', constant('FILE_MIMETYPE_PHOTO')))) { 
       $msgErreurPhoto .= '<b>Attention</b> : Ce fichier est peut-être corrompu !<br />'; 
       $msgErreurPhoto .= 'L\'extension ne correspond pas au type MIME !<br />'; 
      } 
      $traiterPhotoOK  = false; 
     } 
     // ----------------- 
     // on vérifie le TYPE MIME 
     elseif(!in_array($file_MimeType, explode(',', constant('FILE_MIMETYPE_PHOTO')))) { 
      $msgErreurPhoto  .= 'Le type MIME ne correspond pas (Extensions acceptées : <b>'.constant('FILE_EXTENSION_PHOTO').'</b>)<br />'; 
      if(in_array($file_Extension, explode(',', constant('FILE_EXTENSION_PHOTO')))) { 
       $msgErreurPhoto .= '<b>Attention</b> : Ce fichier est peut-être corrompu !<br />'; 
       $msgErreurPhoto .= 'L\'extension ne correspond pas au type MIME !<br />'; 
      } 
      $traiterPhotoOK  = false; 
     } 
     // ----------------- 
     if ($traiterPhotoOK===false) { 
      $msgErreurPhoto  = '<b>Erreur (Photo)</b> :<br />'.$msgErreurPhoto.'Impossible d\'enregistrer le fichier.'; 
     } 
     // ------------------------------------- 
     // si pas d'erreur : TRAITEMENT 
     // ------------------------------------- 
     if ($traiterPhotoOK===true) 
     { 
      // -------------------- 
      // enregistement de la PHOTO sous forme id_nom-image(.jpg, ...) 
      // NB : id etant unique (auto-increment), cela rend le nom de la photo unique 
      $file_Upload  = $newsId.'_'.$_FILES['newsPhoto']['name']; 
      $file_Upload  = formatage_nom_fichier($file_Upload); // remplacement des caracteres speciaux + tout en minuscules 
      $file_Upload  = str_replace('.jpeg','.jpg',$file_Upload); // on remplace aussi .jpeg par .jpg 
      // -------------------- 
      // enregistrement de la photo dans le dossier 
      $temp = $_FILES['newsPhoto']['tmp_name']; 
      move_uploaded_file($temp, '../../'.REP_NEWS_PHOTO.$file_Upload); 
      // -------------------- 
      // REDIMENSIONNEMENT et SAUVEGARDE de la PHOTO (si necessaire) 
      // ecraser (remplacer) la photo (meme rep, meme nom) 
      $redimPHOTOOK  = fctredimimage($newsPhotoLargeur,0,'','','../../'.REP_NEWS_PHOTO,$file_Upload); 
      // -------------------- 
      // SUPPRESSION des ANCIENNES PHOTOS (si necessaire) dans le dossier 
      if ($newsPhotoAvant!='' && $newsPhotoAvant!=$file_Upload) 
      { 
       if(file_exists('../../'.REP_NEWS_PHOTO.$newsPhotoAvant)) { 
        unlink('../../'.REP_NEWS_PHOTO.$newsPhotoAvant); 
       } 
      } 
      // ----------------- 
      // enregistrement du NOM dans la base de donnees par UPDATE 
      $update_query  = "UPDATE ".$NEWS_TABLE." SET ". 
           " news_photo   = :file_Upload, ". 
           " news_photo_largeur = :newsPhotoLargeur ". 
           " WHERE news_id   = :newsId;"; 
      try { 
      $pdo_update   = $pdo->prepare($update_query); 
      $pdo_update->bindValue(':file_Upload',  $file_Upload,  PDO::PARAM_STR); 
      $pdo_update->bindValue(':newsPhotoLargeur', $newsPhotoLargeur, PDO::PARAM_STR); 
      $pdo_update->bindValue(':newsId',   $newsId,   PDO::PARAM_INT); 
      $pdo_update->execute(); 
      } catch (PDOException $e) { echo 'Erreur SQL : '. $e->getMessage().'<br/>'; die(); } 
      // ----------------- 
     } 

    } // fin TRAITEMENT PHOTO 
    // --------------------------------------------------- 

?> 
+2

PHP 5.3 이상을 사용하고 계십니까? 그렇지 않다면, finfo를 pecl 모듈로 설치해야 할 것입니다. –

+0

phpinfo가 5.2.17 버전 – geek

+0

에 있고, PHP를 업그레이드하거나 pecl 모듈을 설치한다고 말했습니다. finfo가 5.3까지 표준 PHP 구성 요소가되지 않았다. –

답변

1

확장 기능을 아직 활성화하지 않은 것 같습니다. php.ini에서 php_fileinfo.dll을 사용하도록 설정하십시오. 작동하지 않고 Windows에서 PHP를 실행중인 경우 Gnuwin을 설치하십시오.

P. PHP를 업데이트 할 것을 강력히 권장합니다. PHP < 5.4에는 많은 기능이 없습니다.

+0

내 웹 호스팅 서비스에서 5.2에서 5.3으로 전환 해 주셔서 감사합니다. 지금은 괜찮습니다. 다시 감사합니다 – geek

관련 문제