XML — PHP скачать уникальный файл

Я пытаюсь создать файл GPX с координатами, который затем будет загружен пользователем. Первая часть создает файл (который работает). Но я не могу получить его для загрузки. Я хочу, чтобы этот файл создавался на лету и загружался таким образом, чтобы при использовании сервиса несколькими пользователями их файлы никогда не могли обмениваться.

Я думаю, что я должен поместить свои данные в переменную, а не в файл, но таким образом я мог бы проверить, работает ли он.

Я новичок в кодировании, обязан делать ошибки;)

Спасибо всем заранее.

Вот что я имею до сих пор;

<?php
// set_include_path("http://localhost/The%20Road%20Planner/tempMap/");
// $filename = uniqid('route.') . '.gpx';

$myfile = fopen('route.gpx', 'w') or die("Unable to open file!");$route = (isset($_POST['RoutePath']) ? $_POST['RoutePath'] : null);fwrite($myfile, '<?xml version="1.0" ?>' . '<gpx version="1.0" creator="Fabrication Junkies" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/0" xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">' . PHP_EOL . '<trk>' . PHP_EOL .
'<name>Map</name>' . PHP_EOL . '<trkseg>'.PHP_EOL);

$coordinates = json_decode($route, true);foreach($coordinates as $pair) {
$output = '<trkpt lat="' . $pair['lat'] .'" lon="'. $pair['lng'] . '"></trkpt>' . PHP_EOL;
fwrite($myfile, $output);
}

fwrite($myfile, '</trkseg>' . PHP_EOL . '</trk>' . PHP_EOL . '</gpx>');
fclose($myfile);

header("Content-type: application/gpx+xml");
header("Content-Disposition: attachment;Filename=route.gpx");

echo "<xml>";
// your gpx data here
$myfile
echo "</xml>";
?>

1

Решение

Вы должны создать разные имена для ваших файлов. Вы можете добавить SESSION_ID к имени файла:

<?php
$filename = session_id().'route.gpx';
$myfile = fopen($filename, 'w') or die("Unable to open file!");
?>

Если пользователи вошли в систему, вы можете добавить идентификатор пользователя к имени файла:

<?php
$filename = $user_id.'route.gpx';
?>
0

Другие решения

Если вам нужно создать файлы в одном каталоге и вы не хотите смешивать имена, которые вы можете использовать uniqid() функция для создания уникальных имен файлов, как это

// preparing unique file name with time prefix
$prefix = uniqid(); // generates a uniqueId based on the microtime
$filePath = $prefix . "_route.gpx";

// opening and writing data inside
$myfile = fopen($filePath, 'w');
... fwrite() what you need inside
fclose($myfile);

// out as download
header("Content-type: application/gpx+xml");
header("Content-Disposition: attachment;Filename=route.gpx");

readfile($filePath);

Вы можете прочитать больше о php uniqid() Вот — http://www.w3schools.com/php/func_misc_uniqid.asp

0

По вопросам рекламы [email protected]