Hallo,
ik zit nu al enkele dagen te broeden op een probleem van multi file downloader.
Mijn vereniging (zangkoor) heeft een aantal midi files dat ze aan de leden wil aanbieden. Per stem zouden ze een aantal midi_files kunnen afhalen, en opslaan op hun locale map. Echter kan ik niet bepalen waar die zullen terecht komen en of ze wel volledig overgezet zijn.

Hier mijn code:
<?php

define('BASE_DIR','./downloads/vivaldi/');
define('LOG_DOWNLOADS',true);

// log file name
define('LOG_FILE','downloads.log');

function file_array($path, $exclude = ".|..", $recursive = true) {
$path = rtrim($path, "/") . "/";
$folder_handle = opendir($path);
$exclude_array = explode("|", $exclude);
$result = array();
while(false !== ($filename = readdir($folder_handle))) {
if(!in_array(strtolower($filename), $exclude_array)) {
if(is_dir($path . $filename . "/")) {
if($recursive) $result[] = file_array($path, $exclude, true);
} else {
$result[] = $filename;
}
}
}
return $result;
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$allowed_ext = array (

'zip' => 'application/zip',

// images
'gif' => 'image/gif',
'png' => 'image/png',
'jpg' => 'image/jpeg',
'jpeg' => 'image/jpeg',

// audio
'mp3' => 'audio/mpeg',
'wav' => 'audio/x-wav',
'mid' => 'audio/midi' ,

'avi' => 'video/x-msvideo'
);
$my_array = explode(",",$_POST['single_value']);
$date = date('d:m:Y');
$time = date('H:i');
$to = '[email protected]';
if(isset($_POST['submit'])) {
if(isset($_POST['frmslct'])) {
foreach( $_POST['frmslct'] as $key => $value) {
$urls[]=$my_array[$value];
}
$mh = curl_multi_init();
foreach ( $urls as $i => $url) {
$g=$save_to.basename($url);
if(!is_file($g)){
$conn[$i]=curl_init($url);
$fp[$i]=fopen ($g, "w");
curl_setopt ($conn[$i], CURLOPT_FILE, $fp[$i]);
curl_setopt ($conn[$i], CURLOPT_HEADER ,0);
curl_setopt($conn[$i],CURLOPT_CONNECTTIMEOUT,60);
curl_multi_add_handle ($mh,$conn[$i]);
}
}
do {
$n=curl_multi_exec($mh,$active);
}
while ($active);
foreach ($urls as $i => $url) {
curl_multi_remove_handle($mh,$conn[$i]);
curl_exec($conn[$i]);
curl_close($conn[$i]);
fclose ($fp[$i]);
}
curl_multi_close($mh);
}
} */
}
else
{
$stem_file_arr = array();

$ip = getenv('REMOTE_ADDR');

$ip = $_SERVER['REMOTE_ADDR'];

$file_arr =array();

$file_arr = file_array(BASE_DIR);
$file_count = count($file_arr);

$stem = 'alt' ;

$stem_file_arr = array();
foreach ($file_arr as $key => $value) {

global $stem_file_arr;
if(preg_match("/".$stem."/", $value)){
$stem_file_arr[] = $value;
}


}
$single_value = implode(",", $stem_file_arr);


?>

<form name='frm1' id='frm1' action="<? $_SERVER['PHP_SELF']; ?>" method='post'>
<input type='hidden'>
<select id="frmslct" multiple name='frmslct[]' size='15'>

<optgroup label='<? echo $stem ?>'>
<?php
foreach ($stem_file_arr as $key => $value) {
echo "<option value =".$key.">".$value."</option>";
}
?>
</optgroup>
</select>
<input type='hidden' name='single_value' value='<? echo htmlspecialchars($single_value); ?>'>
<p><input type='submit' name='submit' id='submit' value='Verzenden' align='left'></p>
</form>
<?php
}
?>
Kan iemand me hierin helpen
Dirk Hooghe op 29/07/2010 23:49:22
Echter kan ik niet bepalen waar die zullen terecht komen


Dat gaat je volgens mij ook niet lukken. Waarom zou je dat ook willen.
Als bezoeker wil ik graag zelf bepalen of ik iets download en waar ik dat dan op mijn harde schijf (welke partitie of toch externe hdd, (sub)map, etc.) opsla. Kan ik het ook weer terug vinden.
Stel dat je het wel zou kunnen beinvloeden; wie garandeert je dan dat ik de bestanden daar laat staan en niet alsnog (na een zoektocht) ze ga verplaatsen naar de plaats waar ik ze hebben wil? Dan schiet je er ook niets mee op.

Beste Obelix en Idefix,
daar heb je wel een punt. Daar kan ik nog mee leven. Echter bij het binnenhalen van een file als deze is verpakt in een <a href= ..>naam.mid</a> dan komt er een scherm met de vraag 'afspelen' of 'opslaan als'. Dit is voor mij OK voor één file, maar in mijn geval heb ik er enkele tientallen. Ik denk dat onze leden het vlug zullen opgeven om ze één voor een aan te klikken. Daarom zoek ik een script dat in een keer een selectie van meer dan twee files kan binnenhalen. De vraag is dan terug, waar zullen ze dan op de HDD van de gebruiker terecht komen.
Dirk Hooghe op 30/07/2010 14:34:30

waar zullen ze dan op de HDD van de gebruiker terecht komen.


Wat maakt jou dat uit?
Dat is toch niet interessant.

Nee dat maakt niets uit. Toch heb ik nog geen antwoord gekregen op de vraag "Hoe kan ik meer dan twee bestanden downloaden" eventueel in batch of iets dergelijks in PHP.
Geen idee om hoeveel bestanden (en grootte) het gaat, maar biedt het als 1 geheel als zip-bestand aan.

Reageren