Да, извращение, конечно, приличное.
Тут не обойтись без обработчика на локальной машине. Потому что это уже отдельный комп, и сервер ему не указ (если бы можно было за здорово живёшь делать exec на соседних машинах, был бы трындец).
Из браузера при помощи javascript'а тоже нельзя ничего выполнять в системе, безопасность-с. Если каждый сайт сможет на компе юзера открывать проводних (хотя бы!) был бы адъ.
Локальная машина, я так понимаю, Виндовая? Тогда вариант с ssh не катит.
Мне первым пришёл в голову вот такой путь.
Может, он довольно нелепый, но мне кажется наиболее быстрым и наименее трудоёмким.
На локальной машине тоже ставим веб-сервак (
WAMP например).
Кроме того под такую задачу не лишним будет сделать отдельный
виртуальный хост и дал доступ к нему ТОЛЬКО с 192.168.0.1. То есть чтобы с любого другого хоста нельзя было этой штукенцией воспользоваться (меры безопасности).
На нём заводим php-файлик, где:
1. Проверяем, пришёл ли запрос от 192.168.0.1, если нет, то
2. В гете получаем путь, который надо открыть
3. Присобачиваем его к строчке 'explorer.exe '
4. exec'им это дело.
В идеале ещё бы неплохо сделать проверку, пришёл ли действительно путь, или туда ещё пытаются вклинить какие-то ещё команды.
Соответственно на твоём серваке при клике на ссылку мы вызываем php'шник с локальной машины, чтоб он сработал (хотя бы так):
file_get_contents('http://айпишник-локальной-машины/путь-к-похапэшнику.php?path=путь-для-открытия');
Как-то так. По идее будет работать.
Вариант: вызывать загрузку страницы 'http://айпишник-локальной-машины/путь-к-похапэшнику.php?path=путь-для-открытия' прямо из javascript'а при помощи ajax-запроса (например
через jQuery). Тогда во-первых избавимся вообще от чего бы то ни было на серваке. Во-вторых можно будет в будущем себе юзерскрипт насобачить, чтобы тебе на странице делал ссылку "открыть файл где сие лежит" (я так понял ты этого в конечно итоге хотел?).
Ну то есть на жабе это будет выглядеть как:
$.ajax({url: 'http://127.0.0.1/путь-к-похапэшнику.php?path=путь-для-открытия'}).success(function(){alert('Ну, вроде, должно открыться!');});
Только учти что тогда запрос на web-сервер локальной машины будет приходить уже с адреса 127.0.0.1, тогда надо разрешить выполнять запросы с него, а не с 192.168.0.1.
Конечно, вариант подымать Apache + php на локальной машине только заради этого выглядит для кого-то абсурдно. Можно на C# например написать обработчик, который будет делать то же самое. Короче тут вариантов много я предложил только один из них.