Пожалуйста, успокойся, это мой первый раз, и, очевидно, я понятия не имею, что я делаю …
Я использую следующий скрипт, который я нашел онлайн для загрузки файлов и записи информации о загрузке в базу данных, я хотел бы получить информацию о $ file_name в другой массив, который будет использоваться вне этого кодового блока в функции implode. Я искал высокий и низкий, но неудачно в поиске. Я выяснил, как печатать $ file_name (ы) изнутри оператора if, но не за пределами как его, так и блока php, но я не могу понять, как это сделать в массив.
Любая помощь будет принята с благодарностью.
<?php if(isset($_FILES['files'])){ $errors= array(); foreach($_FILES['files']['tmp_name'] as $key => $tmp_name ){ $file_name = $key.$_FILES['files']['name'][$key]; $file_size =$_FILES['files']['size'][$key]; $file_tmp =$_FILES['files']['tmp_name'][$key]; $file_type=$_FILES['files']['type'][$key]; $timestamp= date('Ymd G:i:s'); if($file_size > 2097152){ $errors[]='File size must be less than 2 MB'; } $query="INSERT into upload_data (FILE_NAME, FILE_SIZE, FILE_TYPE, timestamp) VALUES(:file_name,:file_size,:file_type, :timestamp)"; $desired_dir="files"; if(empty($errors)==true){ if(is_dir($desired_dir)==false){ mkdir("$desired_dir", 0700); // Create directory if it does not exist } if(is_dir("$desired_dir/".$file_name)==false){ move_uploaded_file($file_tmp,"files/".$file_name); }else{ //rename the file if another one exist $new_dir="files/".$file_name.time(); rename($file_tmp,$new_dir) ; } $q = $dbo->prepare($query); $q->execute(array(':file_name'=>$file_name,':file_size'=>$file_size,':file_type'=>$file_type, ':timestamp'=>$timestamp)); }else{ print_r($errors); } } if(empty($error)){ echo "Success"; } } ?>
Для вашего понимания (как вы сказали, что вы новичок)
В PHP Массив может быть создан с использованием конструкции языка array()
. В качестве аргументов требуется любое количество разделенных запятыми key => value
.
Example #1 A simple array <?php $array = array( "foo" => "bar", "bar" => "foo", ); // as of PHP 5.4 $array = [ "foo" => "bar", "bar" => "foo", ]; ?>
Теперь для вашей озабоченности вам просто нужно положить все измельченные данные из цикла foreach в новый массив следующим образом:
<?php if(isset($_FILES['files'])){ $errors= array(); $filename_array = array(); foreach($_FILES['files']['tmp_name'] as $key => $tmp_name ){ $file_name = $key.$_FILES['files']['name'][$key]; $filename_array[] = $file_name; $file_size =$_FILES['files']['size'][$key]; $file_tmp =$_FILES['files']['tmp_name'][$key]; $file_type=$_FILES['files']['type'][$key]; $timestamp= date('Ymd G:i:s'); if($file_size > 2097152){ $errors[]='File size must be less than 2 MB'; } $query="INSERT into upload_data (FILE_NAME, FILE_SIZE, FILE_TYPE, timestamp) VALUES(:file_name,:file_size,:file_type, :timestamp)"; $desired_dir="files"; if(empty($errors)==true){ if(is_dir($desired_dir)==false){ mkdir("$desired_dir", 0700); // Create directory if it does not exist } if(is_dir("$desired_dir/".$file_name)==false){ move_uploaded_file($file_tmp,"files/".$file_name); }else{ //rename the file if another one exist $new_dir="files/".$file_name.time(); rename($file_tmp,$new_dir) ; } $q = $dbo->prepare($query); $q->execute(array(':file_name'=>$file_name,':file_size'=>$file_size,':file_type'=>$file_type, ':timestamp'=>$timestamp)); }else{ print_r($errors); } } if(empty($error)){ echo "Success"; } } ?>
Теперь в вашем втором блоке получите имена файлов как
foreach ($filename_array as $filename) { echo $filename; }
Обратите внимание на понимание массивов PHP
Установите массив перед циклом:
$file_name_array = array();
Поместите следующий код в строку после $ file_name.
$file_name_array[] = $file_name;
Это даст вам массив, содержащий содержимое в $ file_name, и добавит в массив каждый проход с каждым из них.
Затем вы можете делать все, что пожелаете, с помощью массива.
Объявить массив:
$file_names();
Добавьте эту строку внутри цикла после $file_name
:
$file_names[] = $file_name;
Это $file_names
даст вам имя всех файлов.