Я пытаюсь создать файл 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>";
?>
Вы должны создать разные имена для ваших файлов. Вы можете добавить SESSION_ID к имени файла:
<?php
$filename = session_id().'route.gpx';
$myfile = fopen($filename, 'w') or die("Unable to open file!");
?>
Если пользователи вошли в систему, вы можете добавить идентификатор пользователя к имени файла:
<?php
$filename = $user_id.'route.gpx';
?>
Если вам нужно создать файлы в одном каталоге и вы не хотите смешивать имена, которые вы можете использовать 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