收集整理 9 個常見場景的 PHP 代碼片段,涵蓋郵件閱讀追蹤、網頁關鍵字提取、鏈接掃描、URL 自動轉鏈接、Data URI 生成、遠程圖片下載、Word HTML 清理、瀏覽器語言檢測、Facebook 粉絲數獲取。可直接複製適配專案使用。
原理:在郵件中嵌入 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 = 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 />';
}
移植自 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);
}
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。
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']);
<?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。