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

9 段 PHP 實用功能代碼片段:郵件追蹤、關鍵字提取、鏈接掃描等

     編輯:PHP 綜合知識

前言

收集整理 9 個常見場景的 PHP 代碼片段,涵蓋郵件閱讀追蹤、網頁關鍵字提取、鏈接掃描、URL 自動轉鏈接、Data URI 生成、遠程圖片下載、Word HTML 清理、瀏覽器語言檢測、Facebook 粉絲數獲取。可直接複製適配專案使用。

一、郵件閱讀追蹤:記錄 IP、時間、瀏覽器

原理:在郵件中嵌入 1x1 透明圖片,請求時記錄訪問者信息。

<?php
error_reporting(0);
header("Content-Type: image/jpeg");

// 獲取真實 IP
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ip = $_SERVER['REMOTE_ADDR'];
}

// 時間與瀏覽器
$actual_time = time();
$actual_day = date('Y.m.d', $actual_time);
$actual_hour = date('H:i:s', $actual_time);
$browser = $_SERVER['HTTP_USER_AGENT'];

// 寫入日誌
$myFile = "log.txt";
$fh = fopen($myFile, 'a+');
$stringData = $actual_day . ' ' . $actual_hour . ' ' . $ip . ' ' . $browser . "\r\n";
fwrite($fh, $stringData);
fclose($fh);

// 輸出 1x1 透明圖片
$newimage = imagecreate(1, 1);
$white = imagecolorallocate($newimage, 255, 255, 255);
imagejpeg($newimage);
imagedestroy($newimage);
?>

用法:郵件 HTML 中插入 <img src="track.php" />。

二、提取網頁 Meta Keywords

$meta = get_meta_tags('https://www.example.com/');
$keywords = $meta['keywords'] ?? '';
$keywords = array_filter(array_map('trim', explode(',', $keywords)));
print_r($keywords);

三、掃描頁面所有鏈接

$html = file_get_contents('https://www.example.com');
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a");

for ($i = 0; $i < $hrefs->length; $i++) {
    $href = $hrefs->item($i);
    $url = $href->getAttribute('href');
    echo $url . '<br />';
}

四、自動將文本 URL 轉為可點擊鏈接

移植自 WordPress make_clickable(),支援 http/https、www、ftp、email:

function _make_url_clickable_cb($matches) {
    $ret = ''; $url = $matches[2];
    if (empty($url)) return $matches[0];
    if (in_array(substr($url, -1), ['.', ',', ';', ':'])) {
        $ret = substr($url, -1);
        $url = substr($url, 0, -1);
    }
    return $matches[1] . "<a href=\"$url\" rel=\"nofollow\">$url</a>" . $ret;
}

function _make_web_ftp_clickable_cb($matches) {
    $ret = ''; $dest = 'https://' . $matches[2];
    if (empty($dest)) return $matches[0];
    if (in_array(substr($dest, -1), ['.', ',', ';', ':'])) {
        $ret = substr($dest, -1);
        $dest = substr($dest, 0, -1);
    }
    return $matches[1] . "<a href=\"$dest\" rel=\"nofollow\">$dest</a>" . $ret;
}

function _make_email_clickable_cb($matches) {
    $email = $matches[2] . '@' . $matches[3];
    return $matches[1] . "<a href=\"mailto:$email\">$email</a>";
}

function make_clickable($ret) {
    $ret = ' ' . $ret;
    $ret = preg_replace_callback('#([\s>])([\w]+?://[\w\x80-\xff#$%&~/.\-;:=,?@\[\]+]*)#is', '_make_url_clickable_cb', $ret);
    $ret = preg_replace_callback('#([\s>])((www|ftp)\.[\w\x80-\xff#$%&~/.\-;:=,?@\[\]+]*)#is', '_make_web_ftp_clickable_cb', $ret);
    $ret = preg_replace_callback('#([\s>])([.0-9a-z_+-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})#i', '_make_email_clickable_cb', $ret);
    $ret = preg_replace("#(<a( [^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i", "$1$3</a>", $ret);
    return trim($ret);
}

五、生成 Data URI(圖片內嵌 HTML/CSS/JS)

function data_uri($file, $mime) {
    $contents = file_get_contents($file);
    $base64 = base64_encode($contents);
    return "data:$mime;base64,$base64";
}
// 用法:echo '<img src="' . data_uri('logo.png', 'image/png') . '" />';

六、下載並保存遠程圖片

$image = file_get_contents('https://www.example.com/image.jpg');
file_put_contents('/var/www/images/image.jpg', $image);

注意:需確保 allow_url_fopen=On 或使用 cURL。

七、清理 Microsoft Word 產生的冗余 HTML 標籤

function cleanHTML($html) {
    // 移除 font、span、del、ins 標籤
    $html = preg_replace('/<\/?(font|span|del|ins)[^>]*>/i', '', $html);
    // 移除 class、lang、style、size、face 屬性(執行兩次確保嵌套屬性也被清理)
    $html = preg_replace('/<([^>]*)(class|lang|style|size|face)=("[^"]*"|\'[^\']*\'|[^>]+)([^>]*)>/i', '<\1>', $html);
    $html = preg_replace('/<([^>]*)(class|lang|style|size|face)=("[^"]*"|\'[^\']*\'|[^>]+)([^>]*)>/i', '<\1>', $html);
    return $html;
}

八、檢測瀏覽器偏好語言

function get_client_language($availableLanguages, $default = 'en') {
    if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
        $langs = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
        foreach ($langs as $value) {
            $choice = substr($value, 0, 2);
            if (in_array($choice, $availableLanguages)) {
                return $choice;
            }
        }
    }
    return $default;
}
// 用法:$lang = get_client_language(['en', 'zh', 'ja']);

九、獲取 Facebook 專頁粉絲數(舊版 API,參考用)

<?php
$page_id = "YOUR_PAGE_ID";
$xml = @simplexml_load_file("https://api.facebook.com/restserver.php?method=facebook.fql.query&query=SELECT%20fan_count%20FROM%20page%20WHERE%20page_id=" . $page_id);
if ($xml) {
    echo $xml->page->fan_count;
}
?>

注意:Facebook 已廢棄 FQL,現建議使用 Graph API /{page-id}?fields=fan_count 搭配 Access Token。

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