c’est bien la fonction valider_url_distante($source) qui blesse
dans le php le plugins-dist/medias/action/copier_local.php
dans la fonction action_copier_local_post($id_document), si je désactive la vérification des url distantes les fichiers sont bien copiés (avec ou sans espace …)
/**
* https://code.spip.net/@action_copier_local_post
*
* @param $id_document
* @return bool|mixed|string
*/
function action_copier_local_post($id_document) {
// Il faut la source du document pour le copier
$row = sql_fetsel('mode,fichier, descriptif, credits', 'spip_documents', 'id_document='.intval($id_document));
$source = $row['fichier'];
// si la source est bien un fichier distant
// sinon c'est une donnee moisie, on ne fait rien
include_spip('inc/distant');
// if (tester_url_absolue($source)
// and valider_url_distante($source)) {
$fichier = copie_locale($source);
if (
$fichier
// and valider_url_distante($source)
) {
$fichier = _DIR_RACINE . $fichier;
$files = array();
$files[] = array('tmp_name' => $fichier, 'name' => basename($fichier));
$ajouter_documents = charger_fonction('ajouter_documents', 'action');
spip_log("convertit doc $id_document en local: $source => $fichier", 'medias');
$liste = array();
$ajouter_documents($id_document, $files, '', 0, $row['mode'], $liste);
spip_unlink($fichier);
// ajouter l'origine du document aux credits
include_spip('action/editer_document');
document_modifier(
$id_document,
array('credits' => ($row['credits'] ? $row['credits'] . ', ' : '') . $source)
);
return true;
} else {
spip_log("echec copie locale $source", 'medias' . _LOG_ERREUR);
if ($fichier) {
@unlink(_DIR_RACINE . $fichier);
}
}
// } else {
// spip_log("echec copie locale $source n'est pas une URL distante", 'medias' . _LOG_ERREUR);
// }
return _T('medias:erreur_copie_fichier', array('nom' => $source));
}