Markus Lang
Постоялец
- Регистрация
- 8 Июл 2008
- Сообщения
- 267
- Реакции
- 170
- Автор темы
- #1
В
Для этой задачи сделаем удаленное управление Finder'ом. Создадим подпапку finder в папке с нашим проектом, в моем случае доступ к списку файлов будет по адресу localhost/remote/finder/. Созданим файл index.php со следующим содержанием.
И так поясню код.
Для начала определяем каталог, для которого будем выводить список файлов и покажем его в заголовке. По умолчанию я определил свою пользовательскую директорию "/Users/Ex/".
Первой ссылкой выведем путь к папке верхнего уровня.
Дальше идут несколько магических строчек.
Дело в том, что в AppleScript Finder не понимаем в качестве параметров путь вида "/Users/Ex/". Для передачи в скрипт путь нужно привести к такому хитрому виду «folder Ex of folder Users». В принципе этот код это и делает, переводит путь из одного вида в другой.
Далее выводим список папок.
Выводим список файлов.
Стоит заметить что при выборе папки мы будем вызывать этот же скрипт, но с другим параметром корневой папки, а при выборе файла передадим управление нашему скрипту из первой части commands.php. В качестве параметров передадим имя файла, который нужно открыть и путь к нему. И так, добавим обработку открытия файла в commands.php.
Тут все просто. Приводим путь в нужному виду и говорим Finder'у открыть файл. Для удобства на главной странице сделаем ссылку на обзор файлов.
Вот в принципе и все. У вас должно получиться примерно следующее.
Еще можно для удобства запоминать последний посещенный каталог в куках, но думаю с этим вы справитесь сами.
Теперь все. Потравит полчаса времени сэкономим кучу калорий
Для просмотра скрытого содержимого вы должны войти или зарегистрироваться.
мы научились управлять QuickTime Player и iTunes. Это хорошо, но при просмотре любимых сериалов все равно приходится вставать с дивана, чтобы включить следующую серию. Будем это исправлять.Для этой задачи сделаем удаленное управление Finder'ом. Создадим подпапку finder в папке с нашим проектом, в моем случае доступ к списку файлов будет по адресу localhost/remote/finder/. Созданим файл index.php со следующим содержанием.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, user-scalable=no" />
<title>iRemote</title>
<link rel="stylesheet" href="/remote/style.css" />
</head>
<body>
<?php
if (isset($_GET['folder']))
{
$root = $_GET['folder'];
}
else
{
$root = '/Users/Ex/';
}
echo '<h1>' . $root . '</h1>';
?>
<ul>
<?php
echo '<li><a href="/remote/finder/index.php?folder=' . dirname($root) . '/">./</a></li>';
$folders = array_reverse(explode('/', trim($root, '/')));
foreach ($folders as $folder) {
$cmd = $cmd . ' of folder "' . $folder . '"';
}
$cmd = $cmd . ' of startup disk of application "Finder"';
$files = explode(',', exec('osascript -e \'tell application "Finder" to get folders ' . $cmd . '\''));
foreach ($files as $file) {
echo '<li><a class="folder" href="/remote/finder/index.php?folder=' . $root . trim($file) . '/">' . trim($file) . '</a></li>';
}
$files = explode(',', exec('osascript -e \'tell application "Finder" to get files ' . $cmd . '\''));
foreach ($files as $file) {
echo '<li><a href="/remote/commands.php?app=Finder&cmd=Open&file=' . trim($file) . '&folder=' . $root . '">' . trim($file) . '</a></li>';
}
?>
</ul>
</body>
</html>
И так поясню код.
Для начала определяем каталог, для которого будем выводить список файлов и покажем его в заголовке. По умолчанию я определил свою пользовательскую директорию "/Users/Ex/".
if (isset($_GET['folder']))
{
$root = $_GET['folder'];
}
else
{
$root = '/Users/Ex/';
}
echo '<h1>' . $root . '</h1>';
Первой ссылкой выведем путь к папке верхнего уровня.
echo '<li><a href="/remote/finder/index.php?folder=' . dirname($root) . '/">./</a></li>';
Дальше идут несколько магических строчек.
$folders = array_reverse(explode('/', trim($root, '/')));
foreach ($folders as $folder) {
$cmd = $cmd . ' of folder "' . $folder . '"';
}
$cmd = $cmd . ' of startup disk of application "Finder"';
Дело в том, что в AppleScript Finder не понимаем в качестве параметров путь вида "/Users/Ex/". Для передачи в скрипт путь нужно привести к такому хитрому виду «folder Ex of folder Users». В принципе этот код это и делает, переводит путь из одного вида в другой.
Далее выводим список папок.
$files = explode(',', exec('osascript -e \'tell application "Finder" to get folders ' . $cmd . '\''));
foreach ($files as $file) {
echo '<li><a class="folder" href="/remote/finder/index.php?folder=' . $root . trim($file) . '/">' . trim($file) . '</a></li>';
}
Выводим список файлов.
$files = explode(',', exec('osascript -e \'tell application "Finder" to get files ' . $cmd . '\''));
foreach ($files as $file) {
echo '<li><a href="/remote/commands.php?app=Finder&cmd=Open&file=' . trim($file) . '&folder=' . $root . '">' . trim($file) . '</a></li>';
}
Стоит заметить что при выборе папки мы будем вызывать этот же скрипт, но с другим параметром корневой папки, а при выборе файла передадим управление нашему скрипту из первой части commands.php. В качестве параметров передадим имя файла, который нужно открыть и путь к нему. И так, добавим обработку открытия файла в commands.php.
if ($_GET['app'] == 'Finder')
{
if ($_GET['cmd'] == 'Open')
{
$folders = array_reverse(explode('/', trim($_GET['folder'], '/')));
foreach ($folders as $folder) {
$cmd = $cmd . ' of folder "' . $folder . '"';
}
$cmd = $cmd . ' of startup disk of application "Finder"';
$cmd = 'tell application "Finder" to open file "' . $_GET['file'] . '" ' . $cmd;
}
}
>
Тут все просто. Приводим путь в нужному виду и говорим Finder'у открыть файл. Для удобства на главной странице сделаем ссылку на обзор файлов.
<h1>Finder</h1>
<ul>
<li><a href="/remote/finder/">Browse</a></li>
</ul>
Вот в принципе и все. У вас должно получиться примерно следующее.
Еще можно для удобства запоминать последний посещенный каталог в куках, но думаю с этим вы справитесь сами.
Теперь все. Потравит полчаса времени сэкономим кучу калорий