function admin_repair_plat(){ spip_log("verification des documents joints"); $out = ""; $repertoire = array(); include_spip('inc/getdocument'); $res = sql_select('*','spip_documents',"fichier REGEXP CONCAT('^',extension,'[^/\]') AND distant='non'"); while ($row=sql_fetch($res)){ $ext = $row['extension']; if (!$ext) { spip_log("document sans extension: " . $row['id_document']); continue; } if (!isset($repertoire[$ext])){ if (@file_exists($plat = _DIR_IMG. $ext .".plat")) spip_unlink($plat); $repertoire[$ext] = creer_repertoire_documents($ext); if (preg_match(',_$,',$repertoire[$ext])) $repertoire[$ext] = false; } if ($d=$repertoire[$ext]){ $d = substr($d,strlen(_DIR_IMG)); $src = $row['fichier']; $dest = $d . substr($src,strlen($d)); if (deplacer_fichier_upload(_DIR_IMG . $src, _DIR_IMG . $dest)) { sql_updateq('spip_documents',array('fichier'=>$dest),'id_document='.intval($row['id_document'])); spip_unlink(_DIR_IMG . $src); $out .= "$src => $dest<br />"; } } } return $out; }
function action_spip_image_ajouter_dist($arg, $sousaction2, $source, $return = false) { global $formats_logos; include_spip('inc/documents'); if (!$sousaction2) { if (!$_FILES) { $_FILES = $GLOBALS['HTTP_POST_FILES']; } $source = is_array($_FILES) ? array_pop($_FILES) : ""; } $erreur = ""; if (!$source) { spip_log("spip_image_ajouter : source inconnue"); } else { $f = _DIR_LOGOS . $arg . '.tmp'; if (!is_array($source)) { // fichier dans upload/ $source = @copy(determine_upload() . $source, $f); } else { // Intercepter une erreur a l'envoi if ($erreur = check_upload_error($source['error'], "", $return)) { $source = ""; } else { // analyse le type de l'image (on ne fait pas confiance au nom de // fichier envoye par le browser : pour les Macs c'est plus sur) $source = deplacer_fichier_upload($source['tmp_name'], $f); } } if (!$source) { spip_log("pb de copie pour {$f}"); } } if ($source and $f) { $size = @getimagesize($f); $type = !$size ? '' : ($size[2] > 3 ? '' : $formats_logos[$size[2] - 1]); if ($type) { $poids = filesize($f); if (_LOGO_MAX_SIZE > 0 and $poids > _LOGO_MAX_SIZE * 1024) { spip_unlink($f); $erreur = _T('info_logo_max_poids', array('maxi' => taille_en_octets(_LOGO_MAX_SIZE * 1024), 'actuel' => taille_en_octets($poids))); } elseif (_LOGO_MAX_WIDTH * _LOGO_MAX_HEIGHT and ($size[0] > _LOGO_MAX_WIDTH or $size[1] > _LOGO_MAX_HEIGHT)) { spip_unlink($f); $erreur = _T('info_logo_max_poids', array('maxi' => _T('info_largeur_vignette', array('largeur_vignette' => _LOGO_MAX_WIDTH, 'hauteur_vignette' => _LOGO_MAX_HEIGHT)), 'actuel' => _T('info_largeur_vignette', array('largeur_vignette' => $size[0], 'hauteur_vignette' => $size[1])))); } else { @rename($f, _DIR_LOGOS . $arg . ".{$type}"); } } else { spip_unlink($f); $erreur = _T('info_logo_format_interdit', array('formats' => join(', ', $formats_logos))); } } if ($erreur) { if ($return) { return $erreur; } else { check_upload_error(6, $erreur); } } }
/** * Tourner un document * * http://doc.spip.org/@action_tourner_post * * @param int $id_document * @param int $angle * angle de rotation en degre>0 * @return */ function action_tourner_post($id_document, $angle) { $row = sql_fetsel("fichier,extension", "spip_documents", "id_document=" . intval($id_document)); if (!$row) { return; } include_spip('inc/charsets'); # pour le nom de fichier include_spip('inc/documents'); // Fichier destination : on essaie toujours de repartir de l'original $var_rot = $angle; include_spip('inc/distant'); # pour copie_locale $src = _DIR_RACINE . copie_locale(get_spip_doc($row['fichier'])); if (preg_match(',^(.*)-r(90|180|270)\\.([^.]+)$,', $src, $match)) { $effacer = $src; $src = $match[1] . '.' . $match[3]; $var_rot += intval($match[2]); } $var_rot = (360 + $var_rot) % 360; // 0, 90, 180 ou 270 if ($var_rot > 0) { $dest = preg_replace(',\\.[^.]+$,', '-r' . $var_rot . '$0', $src); spip_log("rotation {$var_rot} {$src} : {$dest}"); include_spip('inc/filtres'); include_spip('public/parametrer'); // charger les fichiers fonctions #bugfix spip 2.1.0 $res = filtrer('image_rotation', $src, $var_rot); $res = filtrer('image_format', $res, $row['extension']); list($hauteur, $largeur) = taille_image($res); $res = extraire_attribut($res, 'src'); include_spip('inc/getdocument'); deplacer_fichier_upload($res, $dest); } else { $dest = $src; $size_image = @getimagesize($dest); $largeur = $size_image[0]; $hauteur = $size_image[1]; } // succes ! if ($largeur > 0 and $hauteur > 0) { $set = array('fichier' => set_spip_doc($dest), 'largeur' => $largeur, 'hauteur' => $hauteur, 'distant' => 'non'); if ($taille = @filesize($dest)) { $set['taille'] = $taille; } sql_updateq('spip_documents', $set, "id_document=" . intval($id_document)); if ($effacer) { spip_log("rotation : j'efface {$effacer}"); spip_unlink($effacer); } // pipeline pour les plugins pipeline('post_edition', array('args' => array('table' => 'spip_documents', 'table_objet' => 'documents', 'spip_table_objet' => 'spip_documents', 'type' => 'document', 'id_objet' => $id_document, 'champs' => array('rotation' => $angle, 'orientation' => $var_rot, 'fichier' => $row['fichier']), 'serveur' => $serveur, 'action' => 'tourner'), 'data' => $set)); } }
function copier_document($ext, $orig, $source) { $orig = preg_replace(',\.\.+,', '.', $orig); // pas de .. dans le nom du doc $dir = creer_repertoire_documents($ext); $dest = preg_replace("/[^.=\w-]+/", "_", translitteration(preg_replace("/\.([^.]+)$/", "", preg_replace("/<[^>]*>/", '', basename($orig))))); // ne pas accepter de noms de la forme -r90.jpg qui sont reserves // pour les images transformees par rotation (action/documenter) $dest = preg_replace(',-r(90|180|270)$,', '', $dest); // Si le document "source" est deja au bon endroit, ne rien faire if ($source == ($dir . $dest . '.' . $ext)) return $source; // sinon tourner jusqu'a trouver un numero correct $n = 0; while (@file_exists($newFile = $dir . $dest .($n++ ? ('-'.$n) : '').'.'.$ext)); return deplacer_fichier_upload($source, $newFile); }
$msg .= "Erreur de téléchargement niveau 2.<br />"; } else { if (my_strtolower($sav_photo['type']) != "image/jpeg") { $msg .= "Erreur : seuls les fichiers ayant l'extension .jpg sont autorisés (<i>" . $sav_photo['name'] . " : " . $sav_photo['type'] . "</i>)<br />"; } else { if (!(preg_match('/jpg$/i', $sav_photo['name']) || preg_match('/jpeg$/i', $sav_photo['name']))) { $msg .= "Erreur : seuls les fichiers ayant l'extension .jpg ou .jpeg sont autorisés (<i>" . $sav_photo['name'] . "</i>)<br />"; } else { $dest = $rep_photos; $sql = "SELECT elenoet FROM eleves WHERE login='******'login_photo']) . "';"; $res_elenoet = mysqli_query($GLOBALS["mysqli"], $sql); if (mysqli_num_rows($res_elenoet) == 0) { $msg .= "Aucun elenoet n'a été trouvé pour renommer la photo de cet élève.<br />\n"; } else { $quiestce = encode_nom_photo(old_mysql_result($res_elenoet, 0, 'elenoet')); if (!deplacer_fichier_upload($sav_photo['tmp_name'], $rep_photos . $quiestce . ".jpg")) { $msg .= "Problème de transfert : le fichier n'a pas pu être transféré sur le répertoire photos/eleves/<br />"; } else { //$msg = "Téléchargement réussi."; if (getSettingValue("active_module_trombinoscopes_rd") == 'y') { // si le redimensionnement des photos est activé on redimenssionne $source = imagecreatefromjpeg($rep_photos . $quiestce . ".jpg"); // La photo est la source if (getSettingValue("active_module_trombinoscopes_rt") == '') { $destination = imagecreatetruecolor(getSettingValue("l_resize_trombinoscopes"), getSettingValue("h_resize_trombinoscopes")); } // On crée la miniature vide // Les fonctions imagesx et imagesy renvoient la largeur et la hauteur d'une image $largeur_source = imagesx($source); $hauteur_source = imagesy($source); $largeur_destination = imagesx($destination);
/** * Verifier la saisie de #FORMULAIRE_FORUM * @param string $objet * @param int $id_objet * @param int $id_forum * @param int|array $ajouter_mot * mots ajout�s coch�s par defaut * @param $ajouter_groupe * groupes ajoutables * @param $afficher_previsu * previsu oui ou non * @param $retour * url de retour * @return array|bool */ function formulaires_forum_verifier_dist($objet, $id_objet, $id_forum, $ajouter_mot, $ajouter_groupe, $afficher_previsu, $retour) { include_spip('inc/acces'); include_spip('inc/texte'); include_spip('inc/session'); include_spip('base/abstract_sql'); $erreurs = array(); $doc = array(); // desactiver id_rubrique si un id_article ou autre existe dans le contexte // if ($id_article OR $id_breve OR $id_forum OR $id_syndic) // $id_rubrique = 0; // stocker un eventuel document dans un espace temporaire // portant la cle du formulaire ; et ses metadonnees avec if (isset($_FILES['ajouter_document']) and $_FILES['ajouter_document']['tmp_name']) { $acceptes = forum_documents_acceptes(); if (!count($acceptes) or _request('cle_ajouter_document') != calculer_cle_action($a = "ajouter-document-{$objet}-{$id_objet}")) { $erreurs['document_forum'] = _T('forum:documents_interdits_forum'); unset($_FILES['ajouter_document']); } else { if (!isset($GLOBALS['visiteur_session']['tmp_forum_document'])) { session_set('tmp_forum_document', sous_repertoire(_DIR_TMP, 'documents_forum') . md5(uniqid(rand()))); } $tmp = $GLOBALS['visiteur_session']['tmp_forum_document']; $doc =& $_FILES['ajouter_document']; include_spip('inc/joindre_document'); include_spip('action/ajouter_documents'); list($extension, $doc['name']) = fixer_extension_document($doc); if (!in_array($extension, $acceptes)) { $erreurs['document_forum'] = _T('public:formats_acceptes', array('formats' => join(', ', $acceptes))); } else { include_spip('inc/getdocument'); if (!deplacer_fichier_upload($doc['tmp_name'], $tmp . '.bin')) { $erreurs['document_forum'] = _T('copie_document_impossible'); } # else if (...) # verifier le type_document autorise # retailler eventuellement les photos } // si ok on stocke les meta donnees, sinon on efface if (isset($erreurs['document_forum'])) { spip_unlink($tmp . '.bin'); unset($_FILES['ajouter_document']); } else { $doc['tmp_name'] = $tmp . '.bin'; ecrire_fichier($tmp . '.txt', serialize($doc)); } } } elseif (isset($GLOBALS['visiteur_session']['tmp_forum_document']) and $tmp = $GLOBALS['visiteur_session']['tmp_forum_document'] and file_exists($tmp . '.bin')) { if (_request('supprimer_document_ajoute')) { spip_unlink($tmp . '.bin'); spip_unlink($tmp . '.txt'); } elseif (lire_fichier($tmp . '.txt', $meta)) { $doc =& $_FILES['ajouter_document']; $doc = @unserialize($meta); } } $min_length = defined('_FORUM_LONGUEUR_MINI') ? _FORUM_LONGUEUR_MINI : 10; if (strlen($texte = _request('texte')) < $min_length and !$ajouter_mot and $GLOBALS['meta']['forums_texte'] == 'oui') { $erreurs['texte'] = _T($min_length == 10 ? 'forum:forum_attention_dix_caracteres' : 'forum:forum_attention_nb_caracteres_mini', array('min' => $min_length)); } elseif (defined('_FORUM_LONGUEUR_MAXI') and _FORUM_LONGUEUR_MAXI > 0 and strlen($texte) > _FORUM_LONGUEUR_MAXI) { $erreurs['texte'] = _T('forum:forum_attention_trop_caracteres', array('compte' => strlen($texte), 'max' => _FORUM_LONGUEUR_MAXI)); } if (array_reduce($_POST, 'reduce_strlen', 20 * 1024) < 0) { $erreurs['erreur_message'] = _T('forum:forum_message_trop_long'); } else { // Ne pas autoriser d'envoi hacke si forum sur abonnement if (controler_forum($objet, $id_objet) == 'abo' and !test_espace_prive()) { if (!isset($GLOBALS['visiteur_session']) or !isset($GLOBALS['visiteur_session']['statut'])) { $erreurs['erreur_message'] = _T('forum_non_inscrit'); } elseif ($GLOBALS['visiteur_session']['statut'] == '5poubelle') { $erreurs['erreur_message'] = _T('forum:forum_acces_refuse'); } } } if (strlen($titre = _request('titre')) < 3 and $GLOBALS['meta']['forums_titre'] == 'oui') { $erreurs['titre'] = _T('forum:forum_attention_trois_caracteres'); } if (!count($erreurs) and !_request('confirmer_previsu_forum')) { if ($afficher_previsu != 'non') { $previsu = inclure_previsu($texte, $titre, _request('url_site'), _request('nom_site'), _request('ajouter_mot'), $doc, $objet, $id_objet, $id_forum); $erreurs['previsu'] = $previsu; } } // Si forum avec previsu sans bon hash de securite, echec if (!count($erreurs)) { if (!test_espace_prive() and $afficher_previsu != 'non' and forum_insert_noprevisu()) { $erreurs['erreur_message'] = _T('forum:forum_acces_refuse'); } } return $erreurs; }
/** * Copier un document * * @param string $ext L'extension du fichier * @param string $dest le nom sous lequel le sauvegarder * @param string $source le fichier sur le serveur (/var/tmp/xyz34) * @param string $dans Où le copier * @return string */ function cfg_copier_document($ext, $dest, $source, $dans='_cfg') { $dest = preg_replace(',\.\.+,', '.', $dest); // pas de .. dans le nom du doc $dir = cfg_creer_repertoire_cfg($dans); $dest = preg_replace("/[^._=-\w\d]+/", "_", translitteration(preg_replace("/\.([^.]+)$/", "", preg_replace("/<[^>]*>/", '', basename($dest))))); // ne pas accepter de noms de la forme -r90.jpg qui sont reserves // pour les images transformees par rotation (action/documenter) $dest = preg_replace(',-r(90|180|270)$,', '', $dest); $newFile = $dir . $dest .'.'.$ext; return _COMPAT_CFG_192 ? cfg_deplacer_fichier_upload($source, $newFile) : deplacer_fichier_upload($source, $newFile); }
function formulaires_forum_verifier_dist( $titre, $table, $type, $script, $id_rubrique, $id_forum, $id_article, $id_breve, $id_syndic, $ajouter_mot, $ajouter_groupe, $afficher_texte, $url_param_retour) { include_spip('inc/acces'); include_spip('inc/texte'); include_spip('inc/forum'); include_spip('inc/session'); include_spip('base/abstract_sql'); $erreurs = array(); // desactiver id_rubrique si un id_article ou autre existe dans le contexte if ($id_article OR $id_breve OR $id_forum OR $id_syndic) $id_rubrique = 0; // stocker un eventuel document dans un espace temporaire // portant la cle du formulaire ; et ses metadonnees avec if (!isset($GLOBALS['visiteur_session']['tmp_forum_document'])) session_set('tmp_forum_document', sous_repertoire(_DIR_TMP,'documents_forum').md5(uniqid(rand()))); $tmp = $GLOBALS['visiteur_session']['tmp_forum_document']; $doc = &$_FILES['ajouter_document']; if (isset($_FILES['ajouter_document']) AND $_FILES['ajouter_document']['tmp_name']) { // securite : // verifier si on possede la cle (ie on est autorise a poster) // (sinon tant pis) ; cf. charger.php pour la definition de la cle if (_request('cle_ajouter_document') != calculer_cle_action($a = "ajouter-document-$id_article-$id_breve-$id_forum-$id_rubrique-$id_syndic")) { $erreurs['document_forum'] = _T('public:documents_interdits_forum') . "ajouter-document-$id_article-$id_breve-$id_forum-$id_rubrique-$id_syndic" .", " ._request('cle_ajouter_document') ; unset($_FILES['ajouter_document']); } else { include_spip('inc/ajouter_documents'); list($extension,$doc['name']) = fixer_extension_document($doc); $acceptes = forum_documents_acceptes(); if (!in_array($extension, $acceptes)) { # normalement on n'arrive pas ici : pas d'upload si aucun format if (!$formats = join(', ',$acceptes)) $formats = '-'; //_L('aucun'); $erreurs['document_forum'] = _T('public:formats_acceptes', array('formats' => $formats)); } else { include_spip('inc/getdocument'); if (!deplacer_fichier_upload($doc['tmp_name'], $tmp.'.bin')) $erreurs['document_forum'] = _T('copie_document_impossible'); # else if (...) # verifier le type_document autorise # retailler eventuellement les photos } // si ok on stocke les meta donnees, sinon on efface if (isset($erreurs['document_forum'])) { spip_unlink($tmp.'.bin'); unset ($_FILES['ajouter_document']); } else { $doc['tmp_name'] = $tmp.'.bin'; ecrire_fichier($tmp.'.txt', serialize($doc)); } } } // restaurer le document uploade au tour precedent else if (file_exists($tmp.'.bin')) { if (_request('supprimer_document_ajoute')) { spip_unlink($tmp.'.bin'); spip_unlink($tmp.'.txt'); } else if (lire_fichier($tmp.'.txt', $meta)) $doc = @unserialize($meta); } if (strlen($texte = _request('texte')) < 10 AND !$ajouter_mot AND $GLOBALS['meta']['forums_texte'] == 'oui') $erreurs['texte'] = _T('forum_attention_dix_caracteres'); else if (defined('_FORUM_LONGUEUR_MAXI') AND _FORUM_LONGUEUR_MAXI > 0 AND strlen($texte) > _FORUM_LONGUEUR_MAXI) $erreurs['texte'] = _T('forum_attention_trop_caracteres', array( 'compte' => strlen($texte), 'max' => _FORUM_LONGUEUR_MAXI )); if (strlen($titre=_request('titre')) < 3 AND $GLOBALS['meta']['forums_titre'] == 'oui') $erreurs['titre'] = _T('forum_attention_trois_caracteres'); if (!count($erreurs) AND !_request('confirmer_previsu_forum')){ if ($afficher_texte != 'non') { $previsu = inclure_previsu($texte, $titre, _request('url_site'), _request('nom_site'), _request('ajouter_mot'), $doc, $id_rubrique, $id_forum, $id_article, $id_breve, $id_syndic); $erreurs['previsu'] = $previsu; } } return $erreurs; }
if (!isset($sav_photo['tmp_name'][$cpt_photo]) or $sav_photo['tmp_name'][$cpt_photo] == '') { $msg .= "Erreur de téléchargement niveau 1 (<i>photo n°{$cpt_photo}</i>).<br />"; } else { if (!file_exists($sav_photo['tmp_name'][$cpt_photo])) { $msg .= "Erreur de téléchargement niveau 2 (<i>photo n°{$cpt_photo}</i>).<br />"; } else { if (my_strtolower($sav_photo['type'][$cpt_photo]) != "image/jpeg") { $msg .= "Erreur : seuls les fichiers ayant l'extension .jpg sont autorisés (<i>" . $sav_photo['name'][$cpt_photo] . " : " . $sav_photo['type'][$cpt_photo] . "</i>)<br />"; } else { if (!(preg_match('/jpg$/i', $sav_photo['name'][$cpt_photo]) || preg_match('/jpeg$/i', $sav_photo['name'][$cpt_photo]))) { $msg .= "Erreur : seuls les fichiers ayant l'extension .jpg ou .jpeg sont autorisés (<i>" . $sav_photo['name'][$cpt_photo] . "</i>)<br />"; } else { $dest = $rep_photos; $n = 0; //$msg.="\$rep_photos=$rep_photos<br />"; if (!deplacer_fichier_upload($sav_photo['tmp_name'][$cpt_photo], $rep_photos . encode_nom_photo($quiestce[$cpt_photo]) . ".jpg")) { $msg .= "Problème de transfert : le fichier n°{$cpt_photo} n'a pas pu être transféré sur le répertoire photos/eleves/<br />"; } else { //$msg = "Téléchargement réussi."; $cpt_photos_mises_en_place++; if (getSettingValue("active_module_trombinoscopes_rd") == 'y') { // si le redimensionnement des photos est activé on redimensionne if (getSettingValue("active_module_trombinoscopes_rt") != '') { $redim_OK = redim_photo($rep_photos . encode_nom_photo($quiestce[$cpt_photo]) . ".jpg", getSettingValue("l_resize_trombinoscopes"), getSettingValue("h_resize_trombinoscopes"), getSettingValue("active_module_trombinoscopes_rt")); } else { $redim_OK = redim_photo($rep_photos . encode_nom_photo($quiestce[$cpt_photo]) . ".jpg", getSettingValue("l_resize_trombinoscopes"), getSettingValue("h_resize_trombinoscopes")); } if (!$redim_OK) { $msg .= " Echec du redimensionnement de la photo."; } }
function ajout_doc($doc_file, $id_ct, $doc_name, $cpt_doc) { global $max_size, $total_max_size, $edit_devoir, $multisite; /* Vérification du type de fichier */ //if (my_ereg("\.([^.]+)$", $doc_file['name'][$cpt_doc], $match)) { if (function_exists("mb_ereg") && mb_ereg("\\.([^.]+)\$", $doc_file['name'][$cpt_doc], $match) || function_exists("ereg") && ereg("\\.([^.]+)\$", $doc_file['name'][$cpt_doc], $match)) { $ext = corriger_caracteres(my_strtolower($match[1])); $ext = corriger_extension($ext); } else { $ext = ''; } $query = "SELECT id_type FROM ct_types_documents WHERE extension='{$ext}' AND upload='oui'"; $result = sql_query($query); if ($row = @sql_row($result, 0)) { $id_type = $row[0]; } else { return "Erreur : Ce type de fichier n'est pas autorisé en téléchargement.<br />\nSi vous trouvez cela regrettable, contactez l'administrateur.<br />\nIl pourra modifier ce paramétrage dans<br />\n*Gestion des modules/Cahiers de textes/Types de fichiers autorisés en téléchargement*."; die; } /* Vérification de la taille du fichier */ $sql = "select id_groupe from ct_entry where id_ct='{$id_ct}'"; $id_groupe = sql_query1($sql); $max_size_ko = $max_size / 1024; $taille = $doc_file['size'][$cpt_doc]; if ($taille > $max_size) { return "Téléchargement impossible : taille maximale autorisée : " . $max_size_ko . " Ko"; die; } if ($taille == 0) { return "Le fichier sélectionné semble vide : transfert impossible."; die; } $query = "SELECT DISTINCT sum(taille) somme FROM ct_documents d, ct_entry e WHERE (e.id_groupe='" . $id_groupe . "' and e.id_ct = d.id_ct)"; $total = sql_query1($query); if ($total + $taille > $total_max_size) { return "Téléchargement impossible : espace disque disponible (" . ($total_max_size - $total) / 1024 . " Ko) insuffisant."; die; } /* Recopier le fichier */ $dest = '../documents/'; $dossier = ''; $multi = isset($multisite) && $multisite == 'y' ? $_COOKIE['RNE'] . '/' : NULL; if (isset($multisite) && $multisite == 'y' && is_dir('../documents/' . $multi) === false) { @mkdir('../documents/' . $multi); $dest .= $multi; } elseif (isset($multisite) && $multisite == 'y') { $dest .= $multi; } if (isset($edit_devoir)) { $dossier = "cl_dev" . $_POST['id_groupe']; } else { $dossier = "cl" . $_POST['id_groupe']; } if (creer_repertoire($dest, $dossier)) { $dest .= $dossier . '/'; } else { return "Problème d'écriture sur le répertoire. Veuillez signaler ce problème à l'administrateur du site"; die; } $nom_sans_ext = mb_substr(basename($doc_file['name'][$cpt_doc]), 0, mb_strlen(basename($doc_file['name'][$cpt_doc])) - (mb_strlen($ext) + 1)); $nom_sans_ext = my_ereg_replace("[^.a-zA-Z0-9_=-]+", "_", $nom_sans_ext); if (strstr($nom_sans_ext, "..")) { return "Problème de transfert : le fichier n'a pas pu être transféré sur le répertoire. Veuillez signaler ce problème à l'administrateur du site"; die; } $n = 0; while (file_exists($newFile = $dest . $nom_sans_ext . ($n++ ? '-' . $n : '') . '.' . $ext)) { } $dest_path = $newFile; if (!deplacer_fichier_upload($doc_file['tmp_name'][$cpt_doc], $dest_path)) { return "Problème de transfert : le fichier n'a pas pu être transféré sur le répertoire. Veuillez signaler ce problème à l'administrateur du site"; die; } if ($doc_name[$cpt_doc] == '') { $doc_name[$cpt_doc] = basename($newFile); } $nouveau = false; if (!isset($id_document)) { if (isset($edit_devoir)) { $query = "INSERT INTO ct_devoirs_documents SET taille='{$taille}', emplacement='{$dest_path}', id_ct_devoir='{$id_ct}', titre='" . corriger_caracteres($doc_name[$cpt_doc]) . "'"; } else { $query = "INSERT INTO ct_documents SET taille='{$taille}', emplacement='{$dest_path}', id_ct='{$id_ct}', titre='" . corriger_caracteres($doc_name[$cpt_doc]) . "'"; } sql_query($query); $id_document = is_null($___mysqli_res = mysqli_insert_id($GLOBALS["mysqli"])) ? false : $___mysqli_res; $nouveau = true; } else { if (isset($edit_devoir)) { $query = "UPDATE ct_devoirs_documents SET taille='{$taille}', emplacement='{$dest_path}', id_ct_devoir='{$id_ct}', titre='{$titre}' WHERE id_document={$id_document}"; } else { $query = "UPDATE ct_documents SET taille='{$taille}', emplacement='{$dest_path}', id_ct='{$id_ct}', titre='{$titre}' WHERE id_document={$id_document}"; } sql_query($query); } return "Téléchargement réussi !"; }
/** * Tester le type de document * * - le document existe et n'est pas de taille 0 ? * - interdit a l'upload ? * - quelle extension dans spip_types_documents ? * - est-ce "inclus" comme une image ? * * Le zipper si necessaire * * @param array $file * Au format $_FILES * @param string $mode * Mode d'inclusion du fichier, si connu * @return array */ function fixer_fichier_upload($file, $mode = '') { /** * On vérifie que le fichier existe et qu'il contient quelque chose */ if (is_array($row = verifier_upload_autorise($file['name'], $mode))) { if (!isset($row['autozip'])) { $row['fichier'] = copier_document($row['extension'], $file['name'], $file['tmp_name']); /** * On vérifie que le fichier a une taille * si non, on le supprime et on affiche une erreur */ if ($row['fichier'] && !($taille = @intval(filesize(get_spip_doc($row['fichier']))))) { spip_log("Echec copie du fichier " . $file['tmp_name'] . " (taille de fichier indéfinie)"); spip_unlink(get_spip_doc($row['fichier'])); return _T('medias:erreur_copie_fichier', array('nom' => $file['tmp_name'])); } else { return $row; } } else { unset($row['autozip']); $ext = 'zip'; if (!($tmp_dir = tempnam(_DIR_TMP, 'tmp_upload'))) { return false; } spip_unlink($tmp_dir); @mkdir($tmp_dir); include_spip('inc/charsets'); $tmp = $tmp_dir . '/' . translitteration($file['name']); $file['name'] .= '.' . $ext; # conserver l'extension dans le nom de fichier, par exemple toto.js => toto.js.zip // deplacer le fichier tmp_name dans le dossier tmp deplacer_fichier_upload($file['tmp_name'], $tmp, true); include_spip('inc/pclzip'); $source = _DIR_TMP . basename($tmp_dir) . '.' . $ext; $archive = new PclZip($source); $v_list = $archive->create($tmp, PCLZIP_OPT_REMOVE_PATH, $tmp_dir, PCLZIP_OPT_ADD_PATH, ''); effacer_repertoire_temporaire($tmp_dir); if (!$v_list) { spip_log("Echec creation du zip "); return false; } $row['fichier'] = copier_document($row['extension'], $file['name'], $source); spip_unlink($source); /** * On vérifie que le fichier a une taille * si non, on le supprime et on affiche une erreur */ if ($row['fichier'] && !($taille = @intval(filesize(get_spip_doc($row['fichier']))))) { spip_log("Echec copie du fichier " . $file['tmp_name'] . " (taille de fichier indéfinie)"); spip_unlink(get_spip_doc($row['fichier'])); return _T('medias:erreur_copie_fichier', array('nom' => $file['tmp_name'])); } else { return $row; } } } else { return $row; } // retourner le message d'erreur }
check_token(); $sav_file = isset($_FILES["sav_file"]) ? $_FILES["sav_file"] : NULL; //echo "\$sav_file['tmp_name']=".$sav_file['tmp_name']."<br />"; if (!isset($sav_file['tmp_name']) or $sav_file['tmp_name'] == '') { $msg = "Erreur de téléchargement " . $sav_file['tmp_name'] . ' ' . $dirname; } else { if (!file_exists($sav_file['tmp_name'])) { $msg = "Erreur de téléchargement." . $dirname . ' ' . $sav_file['tmp_name']; } else { if (!preg_match('/sql$/', $sav_file['name']) and !preg_match('/gz$/', $sav_file['name'])) { $msg = "Erreur : seuls les fichiers ayant l'extension .sql ou .gz sont autorisés."; } else { $dest = "../backup/" . $dirname . "/"; $n = 0; $nom_corrige = preg_replace("/[^.a-zA-Z0-9_=-]+/", "_", $sav_file['name']); if (!deplacer_fichier_upload($sav_file['tmp_name'], "../backup/" . $dirname . "/" . $nom_corrige)) { $msg = "Problème de transfert : le fichier n'a pas pu être transféré sur le répertoire backup"; } else { $msg = "Téléchargement réussi."; } } } } } // Suppression d'un fichier if (isset($action) and $action == 'sup') { check_token(); if (isset($_GET['file']) && $_GET['file'] != '') { if (isset($_GET['sous_dossier']) && $_GET['sous_dossier'] == 'absences') { if (@unlink("../backup/" . $dirname . "/absences/" . $_GET['file'])) { $msg = "Le fichier <b>" . $_GET['file'] . "</b> a été supprimé.<br />\n";
// Téléchargement d'un fichier vers backup if (isset($action) and $action == 'upload') { check_token(); $sav_file = isset($_FILES["sav_file"]) ? $_FILES["sav_file"] : NULL; if (!isset($sav_file['tmp_name']) or $sav_file['tmp_name'] == '') { $msg = "Erreur de téléchargement."; } else { if (!file_exists($sav_file['tmp_name'])) { $msg = "Erreur de téléchargement."; } else { if (!preg_match('/sql$/', $sav_file['name']) and !preg_match('/gz$/', $sav_file['name'])) { $msg = "Erreur : seuls les fichiers ayant l'extension .sql ou .gz sont autorisés."; } else { $dest = "../backup/" . $dirname . "/"; $n = 0; if (!deplacer_fichier_upload($sav_file['tmp_name'], "../backup/" . $dirname . "/data_test.sql")) { $msg = "Problème de transfert : le fichier n'a pas pu être transféré sur le répertoire backup"; } else { $msg = "Téléchargement réussi."; } } } } } // Protection du répertoire backup if (isset($action) and $action == 'protect') { check_token(); include_once "../lib/class.htaccess.php"; // Instance of the htaccess class //$ht = & new htaccess(TRUE); $ht = new htaccess(TRUE);
/** * @param string $objet * @param int $id_objet * @param string $etat * on ou off * @param string|array $source * array : sous tableau de $_FILE issu de l'upload * string : fichier source (chemin complet ou chemin relatif a tmp/upload) * @return string */ function logo_modifier($objet, $id_objet, $etat, $source) { $chercher_logo = charger_fonction('chercher_logo', 'inc'); $objet = objet_type($objet); $primary = id_table_objet($objet); include_spip('inc/chercher_logo'); $type = type_du_logo($primary); // nom du logo $nom = $type . $etat . $id_objet; // supprimer le logo eventueel existant logo_supprimer($objet, $id_objet, $etat); include_spip('inc/documents'); $erreur = ""; if (!$source) { spip_log("spip_image_ajouter : source inconnue"); $erreur = "source inconnue"; return $erreur; } $file_tmp = _DIR_LOGOS . $nom . '.tmp'; $ok = false; // fichier dans upload/ if (is_string($source)) { if (file_exists($source)) { $ok = @copy($source, $file_tmp); } elseif (file_exists($f = determine_upload() . $source)) { $ok = @copy($f, $file_tmp); } } elseif (!($erreur = check_upload_error($source['error'], "", true))) { // analyse le type de l'image (on ne fait pas confiance au nom de // fichier envoye par le browser : pour les Macs c'est plus sur) $ok = deplacer_fichier_upload($source['tmp_name'], $file_tmp); } if ($erreur) { return $erreur; } if (!$ok or !file_exists($file_tmp)) { spip_log($erreur = "probleme de copie pour {$file_tmp} "); return $erreur; } $size = @getimagesize($file_tmp); $type = !$size ? '' : ($size[2] > 3 ? '' : $GLOBALS['formats_logos'][$size[2] - 1]); if ($type) { @rename($file_tmp, $file_tmp . ".{$type}"); $file_tmp = $file_tmp . ".{$type}"; $poids = filesize($file_tmp); if (defined('_LOGO_MAX_WIDTH') or defined('_LOGO_MAX_HEIGHT')) { if (defined('_LOGO_MAX_WIDTH') and _LOGO_MAX_WIDTH and $size[0] > _LOGO_MAX_WIDTH or defined('_LOGO_MAX_HEIGHT') and _LOGO_MAX_HEIGHT and $size[1] > _LOGO_MAX_HEIGHT) { $max_width = (defined('_LOGO_MAX_WIDTH') and _LOGO_MAX_WIDTH) ? _LOGO_MAX_WIDTH : '*'; $max_height = (defined('_LOGO_MAX_HEIGHT') and _LOGO_MAX_HEIGHT) ? _LOGO_MAX_HEIGHT : '*'; // pas la peine d'embeter le redacteur avec ca si on a active le calcul des miniatures // on met directement a la taille maxi a la volee if (isset($GLOBALS['meta']['creer_preview']) and $GLOBALS['meta']['creer_preview'] == 'oui') { include_spip('inc/filtres'); $img = filtrer('image_reduire', $file_tmp, $max_width, $max_height); $img = extraire_attribut($img, 'src'); $img = supprimer_timestamp($img); if (@file_exists($img) and $img !== $file_tmp) { spip_unlink($file_tmp); @rename($img, $file_tmp); $size = @getimagesize($file_tmp); } } // verifier au cas ou image_reduire a echoue if (defined('_LOGO_MAX_WIDTH') and _LOGO_MAX_WIDTH and $size[0] > _LOGO_MAX_WIDTH or defined('_LOGO_MAX_HEIGHT') and _LOGO_MAX_HEIGHT and $size[1] > _LOGO_MAX_HEIGHT) { spip_unlink($file_tmp); $erreur = _T('info_logo_max_poids', array('maxi' => _T('info_largeur_vignette', array('largeur_vignette' => $max_width, 'hauteur_vignette' => $max_height)), 'actuel' => _T('info_largeur_vignette', array('largeur_vignette' => $size[0], 'hauteur_vignette' => $size[1])))); } } } if (!$erreur and defined('_LOGO_MAX_SIZE') and _LOGO_MAX_SIZE and $poids > _LOGO_MAX_SIZE * 1024) { spip_unlink($file_tmp); $erreur = _T('info_logo_max_poids', array('maxi' => taille_en_octets(_LOGO_MAX_SIZE * 1024), 'actuel' => taille_en_octets($poids))); } if (!$erreur) { @rename($file_tmp, _DIR_LOGOS . $nom . ".{$type}"); } } else { spip_unlink($file_tmp); $erreur = _T('info_logo_format_interdit', array('formats' => join(', ', $GLOBALS['formats_logos']))); } return $erreur; }
function ajout_fichier($doc_file, $dest, $cpt_doc, $id_groupe) { global $max_size, $total_max_size; /* Vérification du type de fichier */ $ext = ''; //if (my_ereg("\.([^.]+)$", $doc_file['name'][$cpt_doc], $match)) { if (function_exists("mb_ereg") && mb_ereg("\\.([^.]+)\$", $doc_file['name'][$cpt_doc], $match) || function_exists("ereg") && ereg("\\.([^.]+)\$", $doc_file['name'][$cpt_doc], $match)) { $ext = corriger_caracteres(my_strtolower($match[1])); $ext = corriger_extension($ext); } $query = "SELECT id_type FROM ct_types_documents WHERE extension='{$ext}' AND upload='oui'"; $result = sql_query($query); if ($row = @sql_row($result, 0)) { $id_type = $row[0]; } else { echo "Erreur : Ce type de fichier n'est pas autorisé en téléchargement.\nSi vous trouvez cela regrettable, contactez l'administrateur.\nIl pourra modifier ce paramétrage dans\n *Gestion des modules/Cahiers de textes/Types de fichiers autorisés en téléchargement*."; die; } /* Vérification de la taille du fichier */ $max_size_ko = $max_size / 1024; $taille = $doc_file['size'][$cpt_doc]; if ($taille > $max_size) { echo "Erreur : Téléchargement impossible : taille maximale autorisée : " . $max_size_ko . " Ko"; die; } if ($taille == 0) { echo "Le fichier sélectionné semble vide : transfert impossible."; die; } $query = "SELECT DISTINCT sum(taille) somme FROM ct_documents d, ct_entry e WHERE (e.id_groupe='" . $id_groupe . "' and e.id_ct = d.id_ct)"; $total = sql_query1($query); if ($total + $taille > $total_max_size) { echo "Erreur : Téléchargement impossible : espace disque disponible (" . ($total_max_size - $total) / 1024 . " Ko) insuffisant."; die; } /* Crétion du répertoire de destination */ if (!creer_repertoire($dest)) { echo "Erreur : Problème d'écriture sur le répertoire. Veuillez signaler ce problème à l'administrateur du site"; echo $dest; die; } /* Recopier le fichier */ $nom_sans_ext = mb_substr(basename($doc_file['name'][$cpt_doc]), 0, mb_strlen(basename($doc_file['name'][$cpt_doc])) - (mb_strlen($ext) + 1)); $nom_sans_ext = my_ereg_replace("[^.a-zA-Z0-9_=-]+", "_", $nom_sans_ext); if (strstr($nom_sans_ext, "..")) { echo "Erreur : Problème de transfert : le fichier n'a pas pu être transféré sur le répertoire. Veuillez signaler ce problème à l'administrateur du site"; die; } $n = 0; while (file_exists($newFile = $dest . "/" . $nom_sans_ext . ($n++ ? '-' . $n : '') . '.' . $ext)) { } $dest_file_path = $newFile; if (!deplacer_fichier_upload($doc_file['tmp_name'][$cpt_doc], $dest_file_path)) { echo "Erreur : Problème de transfert : le fichier n'a pas pu être transféré sur le répertoire. Veuillez signaler ce problème à l'administrateur du site"; die; } return $dest_file_path; }
function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode, $id_document, &$documents_actifs, $titrer=false) { include_spip('inc/modifier'); // Documents distants : pas trop de verifications bloquantes, mais un test // via une requete HEAD pour savoir si la ressource existe (non 404), si le // content-type est connu, et si possible recuperer la taille, voire plus. if ($mode == 'distant') { include_spip('inc/distant'); if ($a = recuperer_infos_distantes($source)) { # NB: dans les bonnes conditions (fichier autorise et pas trop gros) # $a['fichier'] est une copie locale du fichier $type_image = $a['type_image']; unset($a['type_image']); unset($a['body']); $a['date'] = date('Y-m-d H:i:s'); $a['distant'] = 'oui'; $a['mode'] = 'document'; $a['fichier'] = set_spip_doc($source); } else { spip_log("Echec du lien vers le document $source, abandon"); return; } } else { // pas distant $type_image = ''; // au pire // tester le type de document : // - interdit a l'upload ? // - quelle extension dans spip_types_documents ? // - est-ce "inclus" comme une image ? list($nom_envoye, $ext, $titre, $inclus) = corriger_extension_et_nom($nom_envoye, $titrer); if ($inclus !== false) { $type_inclus_image = ($inclus == 'image'); $fichier = copier_document($ext, $nom_envoye, $source); } else { /* STOCKER LES DOCUMENTS INCONNUS AU FORMAT .ZIP */ $type_inclus_image = false; if (!sql_countsel("spip_types_documents", "extension='zip' AND upload='oui'")) { spip_log("Extension $ext interdite a l'upload"); return; } $ext = 'zip'; if (!$tmp_dir = tempnam(_DIR_TMP, 'tmp_upload')) return; spip_unlink($tmp_dir); @mkdir($tmp_dir); $tmp = $tmp_dir.'/'.translitteration($nom_envoye); $nom_envoye .= '.zip'; # conserver l'extension dans le nom de fichier, par exemple toto.js => toto.js.zip deplacer_fichier_upload($source, $tmp); include_spip('inc/pclzip'); $source = _DIR_TMP . 'archive.zip'; $archive = new PclZip($source); $v_list = $archive->create($tmp, PCLZIP_OPT_REMOVE_PATH, $tmp_dir, PCLZIP_OPT_ADD_PATH, ''); effacer_repertoire_temporaire($tmp_dir); if (!$v_list) { spip_log("Echec creation du zip "); return; } $fichier = copier_document($ext, $nom_envoye, $source); spip_unlink($source); } // Prevoir traitement specifique pour videos // (http://www.getid3.org/ peut-etre if ($ext == "mov") { $largeur = 0; $hauteur = 0; } else if ($ext == "svg") { // recuperer les dimensions et supprimer les scripts list($largeur,$hauteur)= traite_svg($fichier); } else { // image ? // Si c'est une image, recuperer sa taille et son type (detecte aussi swf) $size_image = @getimagesize($fichier); $largeur = intval($size_image[0]); $hauteur = intval($size_image[1]); $type_image = decoder_type_image($size_image[2]); } // Quelques infos sur le fichier if (!$fichier OR !@file_exists($fichier) OR !$taille = @intval(filesize($fichier))) { spip_log ("Echec copie du fichier $fichier"); return; } // _INTERFACE_DOCUMENTS // Si mode == 'choix', fixer le mode image/document if ($mode == 'choix') { $choisir_mode_document = charger_fonction('choisir_mode_document','inc'); $mode = $choisir_mode_document($fichier, $type_lien, $type_image, $largeur, $hauteur); } if (!$type_image) { if (_DOC_MAX_SIZE > 0 AND $taille > _DOC_MAX_SIZE*1024) { spip_unlink ($fichier); check_upload_error(6, _T('info_logo_max_poids', array('maxi' => taille_en_octets(_DOC_MAX_SIZE*1024), 'actuel' => taille_en_octets($taille)))); } if ($mode == 'image') { spip_log ("le format de $fichier ne convient pas pour une image"); spip_unlink($fichier); return; } } else { // image if (_IMG_MAX_SIZE > 0 AND $taille > _IMG_MAX_SIZE*1024) { spip_unlink ($fichier); check_upload_error(6, _T('info_logo_max_poids', array('maxi' => taille_en_octets(_IMG_MAX_SIZE*1024), 'actuel' => taille_en_octets($taille)))); } if (_IMG_MAX_WIDTH * _IMG_MAX_HEIGHT AND ($size_image[0] > _IMG_MAX_WIDTH OR $size_image[1] > _IMG_MAX_HEIGHT)) { spip_unlink ($fichier); check_upload_error(6, _T('info_logo_max_taille', array( 'maxi' => _T('info_largeur_vignette', array('largeur_vignette' => _IMG_MAX_WIDTH, 'hauteur_vignette' => _IMG_MAX_HEIGHT)), 'actuel' => _T('info_largeur_vignette', array('largeur_vignette' => $size_image[0], 'hauteur_vignette' => $size_image[1])) ))); } } // Si on veut uploader une vignette, il faut qu'elle ait ete bien lue if ($mode == 'vignette') { if (!$type_inclus_image) { spip_log ("le format de $fichier ne convient pas pour une image"); # SVG spip_unlink($fichier); return; } if (!($largeur OR $hauteur)) { spip_log('erreur upload vignette '.$fichier); spip_unlink($fichier); return; } } elseif (!in_array($mode, array('distant', 'image', 'document'))) { if ($type_image AND $type_inclus_image) $mode = 'image'; else $mode = 'document'; } $a = array( 'date' => date('Y-m-d H:i:s'), 'distant' => 'non', 'mode' => $mode, 'titre'=> $titre, 'largeur' => $largeur, 'hauteur' => $hauteur, 'taille' => $taille, 'extension'=> $ext, 'fichier' => set_spip_doc($fichier)); } if (($id_document=intval($id_document)) AND $mode!='vignette') { // Mise a jour des descripteurs d'un vieux doc unset($a['titre']); unset($a['date']); unset($a['distant']); unset($a['mode']); sql_updateq('spip_documents', $a, "id_document=$id_document"); $id = $id_document; } else { // Installer le document dans la base // attention piege semantique : les images s'installent en mode 'vignette' // note : la fonction peut "mettre a jour un document" si on lui // passe "mode=document" et "id_document=.." (pas utilise) // Envoyer aux plugins $a = pipeline('pre_insertion', array( 'args' => array( 'table' => 'spip_documents', ), 'data' => $a ) ); if (strlen($a['fichier']) > 255) { spip_log("Upload avec nom > 255 : " . $a['fichier']); return; } $id = sql_insertq("spip_documents", $a); pipeline('post_insertion', array( 'args' => array( 'table' => 'spip_documents', 'id_objet' => $id_document ), 'data' => $a ) ); spip_log ("ajout du document $source $nom_envoye (M '$mode' T '$type_lien' L '$id_lien' D '$id')"); if ($id_lien AND $id AND preg_match('/^[a-z0-9_]+$/i', $type_lien) # securite ) { sql_insertq('spip_documents_liens', array('id_document' => $id, 'id_objet' => $id_lien, 'objet' => $type_lien)); } else spip_log("Pb d'insertion $id_lien $type_lien"); if ($id_document) { sql_updateq("spip_documents", array("id_vignette" => $id, "mode" => 'document'), "id_document=$id_document"); } else $id_document = $id; // Appliquer l'exif orientation // http://trac.rezo.net/trac/spip/ticket/1494 define('_TOURNER_SELON_EXIF', false); # par defaut non, risque memoire if (defined('_TOURNER_SELON_EXIF') AND _TOURNER_SELON_EXIF AND $mode == 'document' AND $a['distant'] == 'non' AND $a['extension'] == 'jpg') { include_spip('action/tourner'); tourner_selon_exif_orientation($id_document, $fichier); } } // pour que le retour vers ecrire/ active le bon doc. $documents_actifs[$fichier] = $id_document; // Notifications, gestion des revisions, reindexation... pipeline('post_edition', array( 'args' => array( 'operation' => 'ajouter_document', 'table' => 'spip_documents', 'id_objet' => $id, 'type_image' => $type_image ), 'data' => null ) ); return $id ; }