请放轻松我,这是我的第一次,显然我不知道我在做什么......
我使用在线发现的以下脚本上传文件并将上传信息写入数据库,我想将$ file_name信息收集到另一个数组中,以便在内部函数中使用此代码块之外。我搜索得很高,但我的搜索都没有成功。我想出了如何从if语句中打印$ file_name,但不是在它和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('Y-m-d 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";
}
}
?>
答案 0 :(得分:0)
在循环之前设置一个数组:
$file_name_array = array();
将以下代码放在$ file_name之后的行上。
$file_name_array[] = $file_name;
这将为您提供一个包含$ file_name内容的数组,并将在每次传递时添加到每个数组中。
然后你可以用数组做任何你想做的事。
答案 1 :(得分:0)
声明一个数组:
$file_names();
在$file_name
之后在循环中添加此行:
$file_names[] = $file_name;
此$file_names
会为您提供所有文件的名称。
答案 2 :(得分:0)
为了你的理解(如你所说,你是新人)
在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('Y-m-d 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 Arrays