У меня есть базовый сценарий, который позволяет моим участникам сайта загружать короткие образцы своих композиций, чтобы клиенты могли их слушать.
Некоторые имена файлов имеют пробелы, которые, очевидно, создают проблемы при попытке воспроизвести образцы. Есть ли способ заменить эти пространства символами подчеркивания между загрузкой в каталог temp и перемещением файла в каталог «samples»?
<? $url = "http://domain.com/uploads/samples/"; //define the upload path $uploadpath = "/home/public_html/uploads/samples"; //check if a file is uploaded if($_FILES['userfile']['name']) { $filename = trim(addslashes($_FILES['userfile']['name'])); //move the file to final destination if(move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadpath."/". $filename)) { echo " bla bla bla, the final html output "; } else{ if ($_FILES['userfile']['error'] > 0) { switch ($_FILES['userfile']['error']) { case 1: echo 'File exceeded upload_max_filesize'; break; case 2: echo 'File exceeded max_file_size'; break; case 3: echo 'File only partially uploaded'; break; case 4: echo 'No file uploaded'; break; } exit; } } } ?>
После этой строки:
$filename = trim(addslashes($_FILES['userfile']['name']));
Написать:
$filename = str_replace(' ', '_', $filename);
Имя файла hello world.mp3 (два пробела) получится как hello__world.mp3
(два hello__world.mp3
подчеркивания), чтобы избежать этого, вместо этого вы можете сделать это:
$filename = preg_replace('/\s+/', '_', $filename);
$filename = str_replace(' ', '-', trim(addslashes($_FILES['userfile']['name'])));
Почему addslashes
? Это тоже кажется слишком простым – я что-то упускаю?
пытаться;
$filename = trim(str_replace(" ","_", $_FILES['userfile']['name']));