2017-08-03 4 views
1

私は複数のファイルをアップロードする機能を持っています。私は2つのforeachを使用してファイルをアップロードします。最初のforeach、Iループアップロードされたファイル、$random_name2つのforeachに同じ変数があるようにするには?

$j_upl  = count($my_upload["name"]); 
$isUploaded = 0; 
$files  = $_FILES; 

for($i=0;$i<$j_upl;$i++){ 

    $random_name    = substr($my_upload["name"][$i],0,-4)."_".date("ymdhis").$i.substr($my_upload["name"][$i],-4); 
    $this->load->library('upload', $config); 

    $_FILES['upload_act']['name']  = $files['upload_act']['name'][$i]; 
    $_FILES['upload_act']['type']  = $files['upload_act']['type'][$i]; 
    $_FILES['upload_act']['tmp_name'] = $files['upload_act']['tmp_name'][$i]; 
    $_FILES['upload_act']['error']  = $files['upload_act']['error'][$i]; 
    $_FILES['upload_act']['size']  = $files['upload_act']['size'][$i]; 

    $this->upload->initialize($config); 


    $this->upload->do_upload('upload_act'); 

} 

では、私は、file_nameをに追加する.date("ymdhis")を使用しています。したがって、ファイル名はthe file name."_".datetime uplodedに変更されます。

2番目のforeachでは、これを使用して$random_nameをデータベースに挿入します。私は$file_nameを得るために同じ方法を使用し

foreach($details as $rows){    

    $file_name = substr($rows['val_upl'],0,-4)."_".date("ymdhis").$ii.substr($rows['val_upl'],-4);    

    $dt_act['UPL_FILENAME']  = ($rows['val_upl'] == "") ? NULL : $file_name.$ii;    

    $this->MProject->ins_activity_m($dt_act); 
    $ii += 1; 
} 

。約2-3ファイルをアップロードした場合、$file_name$random_nameと一致しています。しかし、アップロードするファイルがさらにある場合、('Ymdhis')の2番目のファイルが異なるため、$random_nameと一致しません。

$random_name$random_nameと一致させる最も良い方法は、挿入されたfile_nameがアップロードされたfile_nameと一致するようにすることです。

注:あなたがより正確なファイル名をキャプチャする必要がある場合は

  • 私はfile_nameのに何かを追加したかもしれないが、私は何も削除しないことを好む
+0

日付がアップロードされる正確な秒であることは重要ですか?なぜあなたの変数で 'date()'をループの外に移動し、それを変数に代入して、それを両方のループに渡すのはどうですか?あなたはまだ、コードが開始する正確な時間を、バッチを個別に処理する時間と同じにしています。 –

+0

@MatthewBrentはい、私はまた別の目的のために秒も必要です。 – Vahn

+0

すべてのアップロードファイル名にアタッチできるループの前に '$ random'値を生成するだけではどうですか? 'date()'に頼る代わりに? –

答えて

0

これを解決する最も簡単な方法は、最初のforループに必要な情報をキーと値のペアとして渡して関連配列を作成することです。あなたはすでに以下のような値にアクセスするために、既存のファイル名のようなあなたのループ内の値を知っているキーを使用することができるようあなたは私に注意してください

$file_uploads = array(); for($i=0;$i<$j_upl;$i++){ $random_name = substr($my_upload["name"][$i],0,-4)."_".date("ymdhis").$i.substr($my_upload["name"][$i],-4); $file_uploads[$my_upload["name"][$i]] = array( 'new_name' => $random_name, 'some_other_value' => $some_other_var ); $this->load->library('upload', $config); $_FILES['upload_act']['name'] = $files['upload_act']['name'][$i]; $_FILES['upload_act']['type'] = $files['upload_act']['type'][$i]; $_FILES['upload_act']['tmp_name'] = $files['upload_act']['tmp_name'][$i]; $_FILES['upload_act']['error'] = $files['upload_act']['error'][$i]; $_FILES['upload_act']['size'] = $files['upload_act']['size'][$i]; $this->upload->initialize($config); $this->upload->do_upload('upload_act'); } foreach($details as $rows){ $file_name = $file_uploads[substr($rows['val_upl']]['new_name']; $dt_act['UPL_FILENAME'] = ($rows['val_upl'] == "") ? NULL : $file_name.$ii; $this->MProject->ins_activity_m($dt_act); $ii += 1; } 

...このオブジェクトをループする必要はありません。これをテストしていないし、私はここで盲目的にコーディングしていますが、それはあなたをそこに連れて行くには十分なはずです。

+0

'previousCode.date( 'ymdhis')'とは何ですか? – Vahn

+0

ちょうど擬似コード...あなたのすべてのコードでpreviousCodeを置き換えてください –

+0

ああ大丈夫です。私はそれを試してみます。 – Vahn

0

を(日時書式が存在している必要があります)最初のループ、ファイル名だけを格納する最初のループ内に配列を作成してみませんか?その後、名前を再構築するのではなく、$ rowsの値で配列を参照することができます。

+0

2番目のforeachで配列をループする方法は? – Vahn

+0

以下を参照してください。Vahn ...疑似コードですが、必要な場合は明確にすることができます。 –

関連する問題