首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 生成桌面網址快捷方式(.url 文件)下載功能

     編輯:PHP 相關知識

PHP 動態生成 .url 快捷方式文件實現指南

通過 PHP 動態生成 Windows 桌面快捷方式(.url 文件),讓用戶點擊鏈接即可下載包含指定網址的快捷方式,雙擊即可在默認瀏覽器中打開對應網頁。這對於推廣網站、提供快速訪問入口非常實用。

核心實現代碼

<?php
/**
 * 生成並下載 .url 桌面快捷方式
 * @param string $targetUrl 目標網址
 * @param string $shortcutName 快捷方式名稱(不含副檔名)
 * @param string $iconUrl 圖標 URL(可選)
 */
function downloadUrlShortcut($targetUrl, $shortcutName = 'Website', $iconUrl = '') {
    // 驗證 URL 格式
    if (!filter_var($targetUrl, FILTER_VALIDATE_URL)) {
        http_response_code(400);
        exit('無效的目標網址');
    }

    // 構建 .url 文件內容(INI 格式)
    $content = "[InternetShortcut]\r\n";
    $content .= "URL={$targetUrl}\r\n";
    $content .= "IDList=\r\n";
    
    // 設置圖標(優先使用指定圖標,其次嘗試 favicon.ico)
    if ($iconUrl) {
        $content .= "IconFile={$iconUrl}\r\n";
    } elseif (parse_url($targetUrl, PHP_URL_HOST)) {
        $scheme = parse_url($targetUrl, PHP_URL_SCHEME) ?: 'https';
        $host = parse_url($targetUrl, PHP_URL_HOST);
        $content .= "IconFile={$scheme}://{$host}/favicon.ico\r\n";
    }
    $content .= "IconIndex=1\r\n";
    
    // 標準 CLSID(固定值)
    $content .= "[{000214A0-0000-0000-C000-000000000046}]\r\n";
    $content .= "Prop3=19,2\r\n";

    // 設置響應頭
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="' . rawurlencode($shortcutName) . '.url"');
    header('Content-Length: ' . strlen($content));
    header('Cache-Control: no-cache, must-revalidate');
    header('Pragma: no-cache');
    
    echo $content;
    exit;
}

// 使用示例
// 直接訪問:shortcut.php?url=https://example.com&name=MySite&icon=https://example.com/favicon.ico
if (isset($_GET['url'])) {
    $name = $_GET['name'] ?? 'Website';
    $icon = $_GET['icon'] ?? '';
    downloadUrlShortcut($_GET['url'], $name, $icon);
}
?>

.url 文件格式詳解

.url 文件本質是 Windows 系統識別的 INI 格式文本文件,核心字段說明:

  • [InternetShortcut]:標識這是一個網絡快捷方式
  • URL:目標網址(必填),支持 http/https/ftp/mailto 等協議
  • IconFile:圖標文件路徑,支持 .ico、.exe、.dll 等,也可為遠程 URL
  • IconIndex:當圖標文件包含多個圖標時的索引(從 0 開始)
  • [{000214A0-0000-0000-C000-000000000046}]:Internet Shortcut 的標準 CLSID
  • Prop3=19,2:Windows Shell 屬性標識,表示這是一個 URL 鏈接

進階功能擴展

<?php
/**
 * 批量生成快捷方式打包下載(ZIP)
 */
function downloadMultipleShortcuts(array $sites, $zipName = 'shortcuts.zip') {
    // 需啟用 ZipArchive 擴展
    $zip = new ZipArchive();
    $tempDir = sys_get_temp_dir() . '/shortcuts_' . uniqid();
    mkdir($tempDir, 0755, true);
    
    foreach ($sites as $site) {
        $name = $site['name'] ?? 'Website';
        $url = $site['url'] ?? '';
        $icon = $site['icon'] ?? '';
        
        if (!$url) continue;
        
        $content = "[InternetShortcut]\r\nURL={$url}\r\n";
        if ($icon) $content .= "IconFile={$icon}\r\n";
        $content .= "IconIndex=1\r\n[{000214A0-0000-0000-C000-000000000046}]\r\nProp3=19,2\r\n";
        
        $safeName = preg_replace('/[\\\\\/:*?"<>|]/', '_', $name);
        file_put_contents("{$tempDir}/{$safeName}.url", $content);
    }
    
    if ($zip->open($zipName, ZipArchive::CREATE) === TRUE) {
        $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($tempDir));
        foreach ($files as $file) {
            if (!$file->isDir()) {
                $zip->addFile($file->getRealPath(), $file->getFilename());
            }
        }
        $zip->close();
    }
    
    // 清理臨時文件並輸出 ZIP
    // ... (省略清理和輸出代碼)
}

// 企業級應用:生成帶有追蹤參數的快捷方式
function generateTrackedShortcut($baseUrl, $campaignId, $channel) {
    $trackedUrl = $baseUrl . '?utm_source=shortcut&utm_medium=desktop&utm_campaign=' . $campaignId . '&utm_content=' . $channel;
    return downloadUrlShortcut($trackedUrl, "Campaign_{$campaignId}_{$channel}");
}
?>

瀏覽器兼容性說明

瀏覽器行為備註
Chrome/Edge/Firefox直接下載 .url 文件雙擊即可在默認瀏覽器打開
Safari (macOS)下載 .url 文件macOS 不原生支持 .url,需第三方工具
移動端瀏覽器可能嘗試直接打開而非下載建議移動端隱藏此功能

安全與最佳實踐

  1. 輸入驗證:嚴格驗證 URL 格式,防止注入惡意協議(如 javascript:、data:)
  2. 域名白名單:生產環境建議限制只能生成本域名或受信任域名的快捷方式
  3. HTTPS 強制:優先生成 HTTPS 鏈接,保障用戶訪問安全
  4. 防濫用:添加速率限制,防止惡意生成大量文件消耗帶寬

這項功能雖然簡單,但對於營銷推廣、客戶服務、內部工具分發等場景極具價值,只需幾十行代碼即可實現專業級的快捷方式生成服務。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved