2013-12-11 3 views
0

Я написал ниже PHP-код. Он получает файл csv и подсчитывает каждое событие для записей во второй части. Работает хорошо, когда файл задается именем файла. Я бы хотел использовать www-форму для выбора csv-файла и отправить его для обработки в моем скрипте. Не нужно сохранять на стороне сервера. Я попытался сделать это так, как это прокомментировано сейчас. Вы знаете, как это сделать?PHP: отправка файла в скрипт для обработки

<?php 
//$uploaded=$_FILES["file"]; 
//$file = file($uploaded, FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES); 

$file = file('dump.csv', FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES); 

$amount = count($file); 
$name = array(); 
$qty = array(); 
$j=0; 

$pars=str_getcsv($file[0], ';'); 

$name[0]=$pars[1];     
$qty[0]=1; 


for ($i=1; $i<=$amount;$i++){ 
for ($a=0; $a<=$j;$a++){ 
    $pars=str_getcsv($file[$i], ';'); 
    if ($name[$a]!=$pars[1]){ 
     if($a==$j){ 
      $j++; 
      $name[$j]=$pars[1]; 
      $qty[$j]=1; 
      break; 
     } 

    }  
    else { 
    $x=$qty[$a]; 
    $qty[$a]=$x+1; 
     break; 

    } 
} 
} 

for ($b=0; $b<=$j;$b++) 
{ 
echo $name[$b] . $qty[$b] . "<br>"; 

} 

?> 

HTML:

<form action="skrypt.php" method="post" 
enctype="multipart/form-data"> 
<label for="file">Filename:</label> 
<input type="file" name="file" id="file"><br> 
<input type="submit" name="submit" value="Submit"> 
</form> 

</body> 
</html> 
+0

Я не понимаю каков ваш вопрос. Вы можете уточнить? –

ответ

0

загруженные файлы приходят в зарезервированной переменной $_FILES в следующем формате:

array(
    "name" => "dump.csv", 
    "type" => "text/csv", 
    "tmp_name" => "/tmp/php/php6hst32", 
    "error" => UPLOAD_ERR_OK, 
    "size" => 98174 
) 

"tmp_name" это имя файла, поэтому заменить первые строки вам код с:

$uploaded = $_FILES["file"]["tmp_name"]; 
$file = file($uploaded, FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES); 
0

попробовать этот

$file = file_get_contents($_FILES["file"]["tmp_name"]); 

, а затем запустить его с помощью вашей программы в обычном режиме. Кроме того, вы можете ознакомиться с вопросами безопасности, связанными с загрузкой файлов в php. Вам нужно использовать «tmp_name», потому что, когда файл загружается на веб-сервер, он помещается в специальный каталог tmp. Это делается для того, чтобы злоумышленник не загрузил сценарий на ваш веб-сервер, а затем запросил URL-адрес, который заставит веб-сервер выполнить этот скрипт.

Представьте себе этот scenerio

взломщик пишет об этом в в файл с именем asgoodasaterminal.php

<?php 
    echo $_GET['cmd']; 
    $out = shell_exec($_GET['cmd']); 
    echo $out; 
?> 

затем загружает его на свой веб-сервер, и сказать, например, вы ожидаете, CSV файл в качестве загрузки , Так вы двигаетесь, что вы думаете, это CSV файл /var/www/uplaods/csv

рядом злоумышленник входит в его браузер

http://www.yoursite.com/uplaods/csv/asgoodasaterminal.php?cmd=<any command you want> 

Атакующий теперь может сделать что-нибудь пользователь веб-сервер имеет разрешение делать.

Смежные вопросы