2009-07-22 3 views
0

1.Hi, у меня есть сценарий загрузки только для внутреннего использования, который загружает файлы в каталог. Когда я загружаю что-то с моего компьютера с помощью spcace в имени i.e, пример 1.zip, он загружает пространство с именем, таким образом убивая ссылку в электронном письме. Возможно ли сделать apache удалением пространства при его загрузке или сделать его символом подчеркивания?Удаление пробелов в именах файлов apache

Вторая проблема, с которой я столкнулась, заключается в том, как бы я разобрал это, чтобы связать ссылку электронной почты с URL-адресом файла как тела электронной почты и электронной почты addy?

if (move_uploaded_file($_FILES['file']['tmp_name'], $uploaddir . $_FILES['file']['name'])) { 
    // uploaded file was moved and renamed succesfuly. Display a message. 
    echo "Link: " . "http://example.org/" . $_FILES["file"]["name"]; 

ответ

7

Вам просто нужно urlencode() Ваше имя файла, и все прекрасно:

echo "Link: http://example.org/" . urlencode($_FILES["file"]["name"]); 

Но если вы хотите, чтобы удалить пробелы по другой причине, вы можете использовать str_replace():

$replaced_name = str_replace(' ', '_', $_FILES["file"]["name"]); 
rename($uploaddir . '/' . $_FILES['file']['name'], $uploaddir . '/' . $replaced_name); 
# You should urlencode() it nonetheless: 
echo "Link: http://example.org/" . urlencode($replaced_name); 
+0

Как сделать так, чтобы я мог использовать эту ссылку в качестве почтового отправления, так как ссылка будет отображаться на теле, и все будет в сообщении. – hnhh

+0

Посмотрите раздел примеров соответствующих RFC: http: // tools .ietf.org/html/rfc2368 # section-6 – soulmerge

+0

Спасибо большое, очень полезно –

1

Попытка:

$filename = $_FILES['file']['name']; 
$filename = preg_replace("/[^a-zA-Z0-9]/", "", $filename); 

//then 
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploaddir . $filename)) { 

// uploaded file was moved and renamed succesfuly. Display a message. 
echo "Link: " . "http://example.org/" . $filename; 
+0

Спасибо! любой идеал о том, как я буду делать электронную почту как вещь – hnhh

+0

Вы хотите отправить эту ссылку по электронной почте? – Nathan

+0

В принципе, я хочу, чтобы это эхо mailto: [email protected] с основным текстом по ссылке. – hnhh

1

Как примечание: с кодом, который вы используете, что происходит, если загружаются два файла с тем же именем? Если вы не сделаете проверку (например, «есть файл, который уже имеет это имя в $uploaddir?»), второй файл заменит первый.

Возможно, это не то, что вы хотите ... не так ли?

Если нет, то для решения этой (потенциальной) проблемы одно решение - всегда переименовывать загруженные файлы, с именами вы контроль. (Простой счетчик будет, вероятно, на хитрость)

Другое дело: $_FILES["file"]["name"] посылается клиентом, и, как таковые, вероятно, могут быть подделаны содержит все, что кто-то захочет. Если он содержит что-то вроде «../../index.php» (или что-то в этом роде - вы поняли), это может позволить кому-то разместить любой файл, который они хотят на вашем сервере.

Чтобы предотвратить это, вы должны быть уверены, что имя файла/путь, используемый в качестве адресата move_uploaded_file, не содержит ничего «опасного». Решением может быть использование basename. (см., например, пример № 2 на POST method uploads)

Возможно, вы также захотите проверить тип загружаемого файла mimetype, чтобы вы, например, не получали исполняемые файлы, и вы должны убедиться, что загруженные файлы не являются исполняемый веб-сервером.

Смежные вопросы