Функция Sha1_file у меня не работает

function addFlyer($db){
if (isset($_FILES['file_array'])) {
$name_array = $_FILES['file_array']['name'];
$tmp_name_array = $_FILES['file_array']['tmp_name'];
$type_array = $_FILES['file_array']['type'];
$size_array = $_FILES['file_array']['size'];
$error_array = $_FILES['file_array']['error'];

for ($i = 0; $i < count($tmp_name_array); $i++) {
if (file_exists('images/' . sha1_file($name_array[$i]))) {
// File exists already in the folder.
$uploadOk = 0;
header("Location: admin.php?action=errorupload");
}

else {
if (move_uploaded_file($tmp_name_array[$i], "images/" . sha1_file($name_array[$i]))) {
//upload complete
$uploadOk = 1;
} else {
//upload failed.
header("Location: admin.php?action=errorupload");
}
}
}

if($uploadOk == 1 && isset($_POST['month'], $_POST['title'], $_POST['content'], $_POST['content1'], $_POST['content2'])) {
$query = $db->prepare("INSERT INTO version (month, title, content, content1, content2, imgurls, imgurlm, imgurll, imgurlfb) VALUES(:month, :title, :content, :content1, :content2, :imgurls, :imgurlm, :imgurll, :imgurlfb)");
$query->bindParam(':month', $_POST['month'], PDO::PARAM_STR);
$query->bindParam(':title', $_POST['title'], PDO::PARAM_STR);
$query->bindParam(':content', $_POST['content'], PDO::PARAM_STR);
$query->bindParam(':content1', $_POST['content1'], PDO::PARAM_STR);
$query->bindParam(':content2', $_POST['content2'], PDO::PARAM_STR);
$query->bindParam(':imgurls', sha1_file($_FILES['file_array']['name'][0]), PDO::PARAM_STR);
$query->bindParam(':imgurlm', sha1_file($_FILES['file_array']['name'][1]), PDO::PARAM_STR);
$query->bindParam(':imgurll', sha1_file($_FILES['file_array']['name'][2]), PDO::PARAM_STR);
$query->bindParam(':imgurlfb', sha1_file($_FILES['file_array']['name'][3]), PDO::PARAM_STR);

$query->execute();
header("Location: admin.php");
}

}
}

В настоящее время я получил этот код, но он не хэширует файлы и не помещает его в базу данных. Что сейчас идет не так? Это просто идет на страницу ошибки, которую я сделал, кто-то знает решение?

-1

Решение

Конечно, это не работает.

$name_array = $_FILES['file_array']['name'];
...
if (file_exists('images/' . sha1_file($name_array[$i]))) {

Как вы можете узнать из документации PHP о загрузка файлов,
$_FILES['...']['name'] является:

Оригинальное имя файла на клиентская машина.

И вы передаете это имя sha1_file() и ожидать, что он найдет файл на ваш сервер и обработать это.

Если вы хотите сохранить каждый файл только один раз и сделать это, присвоив файлу имя с SHA1 его содержимого, тогда вы должны SHA1 содержимое, которое находится на вашем сервере и ожидает обработки, в $_FILES['file_array']['tmp_name'], Или же $tmp_name_array если вы предпочитаете это так.

И тебе следует позвонить sha1_file() только один раз для каждого файла, а не дважды, так как это трудоемкая операция.

Попробуйте это (я изменил только те строки, которые содержат $local_file_name):

for ($i = 0; $i < count($tmp_name_array); $i++) {
$local_file_name = sha1_file($tmp_name_array[$i]);
if (file_exists('images/'.$local_file_name)) {
// File exists already in the folder.
$uploadOk = 0;
header("Location: admin.php?action=errorupload");
} else {
if (move_uploaded_file($tmp_name_array[$i], 'images/'.$local_file_name)) {
//upload complete
$uploadOk = 1;
} else {
//upload failed.
header("Location: admin.php?action=errorupload");
}
}
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]