最近想做一个统计,谁用了我网站的图片、链接等数据。
图片统计大概可以这样。
/var/www/html/1.jpg
/var/www/html/tracker.php
/var/www/html/.htacess
RewriteEngine On
RewriteBase /
RewriteRule ^(.*).jpg$ tracker.php?id=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
header('Content-type:image/jpeg');
readfile($_GET['id'].'.jpg');
//file_put_contents('log.txt',$_GET['id'].' '.$_SERVER['REMOTE_ADDR'].' '.var_dump(apache_request_headers()));
?>
上面的代码可以统计图片被打开过几次,访问者的IP和浏览器等数据。但是如何统计反向链接呢? 比如:另一个网站使用了这张图片,那么怎样统计到底有多少网站使用了我的图片?(而不是单纯的浏览器打开)
另外,比如我制作一个小插件。允许用户嵌入该插件到他们的网站 那么script.php应该写一些怎样的代码,可以统计哪些网站使用了我的插件?
我只想知道代码怎么写?返回的数据与数据库的联系可以另外设计。谢谢。
回复讨论(解决方案)
怎样统计到底有多少网站使用了我的图片?(而不是单纯的浏览器打开)
只要??http?求,不需要知道是否用??器打?。
你可以在tracker.php中加上$_SERVER['HTTP_REFERER'] ??取?源地址,即?求你???的?面的地址。
然後通?正?,?取url的domain入?。??直接 group by photo 就可以了
表??
id photo domain
你的代码只能统计动态的请求,对于静态的 url 就无能为力了,比如 http://www.mydomain,com/1.jpeg
正确的做法是分析 web 服务器的日志文件
楼上讲的对,如果你的图片全部都是用动态php去显示的,你的程序已经可以了。加上$_SERVER['HTTP_REFERER']获取来源。
而静态图片则可以通过获取apache log来分析。
你的代码只能统计动态的请求,对于静态的 url 就无能为力了,比如 http://www.mydomain,com/1.jpeg
正确的做法是分析 web 服务器的日志文件
php分析access_log? 那个log每天都有近百MB,如果cron脚本每5分钟运行一次,怎么高效的读取log文件?(时间段:当前时间-5分钟,到当前,那么是不是也要完整读取整个log文件?)
还有怎么做foreach?按/r/n换行还是别的?然后再正则,再放进数据库?
大侠,能不能给段高效点的代码?谢谢。
楼上讲的对,如果你的图片全部都是用动态php去显示的,你的程序已经可以了。加上$_SERVER['HTTP_REFERER']获取来源。
而静态图片则可以通过获取apache log来分析。
哦,谢谢。小问一下,php动态读取和静态读取图片相比,是不是会花费更多的CPU,内存和IO?是不是会增加许多?
1、静态文件由 web 服务器直接读取,而php动态读取则需要先启动 php 解析程序,再由 php 程序读取
板板脚趾头都会知道谁的效率高
2、日志文件是只增不减的,并且已存在的内容也不会被修改。所以你只需记住上一次读到哪里,这次接着读就可以了
??快很多,
php?取?慢。
最好用??。
并不是所有的虚拟主机 日志存放路径 可以自行修改的。
所以你开发的这个项目,只能用于 云服务器的站长, 当然,大家对图片给谁动用了,并不觉得有什么,不是吗?
中国的网络是开放的,没多少人会去在乎注意这些东西,应该应该本着共享的精神。
如果有一天,发现图片给动用得非常多了。那么只需要一个伪静态代码,就可以把访问图片引用变成一个logo或者其它精心制作的广告图,
你有没有发现有很多图片有时候显示“该图片来自 XXX站,请进入***访问”,那些都是伪静态,一句话就搞定了。只要别人引用了网站图片,那图片就会变成伪静态设定好的另外一张图片。
1、静态文件由 web 服务器直接读取,而php动态读取则需要先启动 php 解析程序,再由 php 程序读取
板板脚趾头都会知道谁的效率高
2、日志文件是只增不减的,并且已存在的内容也不会被修改。所以你只需记住上一次读到哪里,这次接着读就可以了
明白了那么怎么写一段PHP代码分析日志文件呢?循环,正则读取,然后怎么才能记住上一次读取到哪儿呢?
SSH可以用类似 cat /var/log/httpd/access_log | grep "1.jpeg",打印出所有访问过1.jpeg的用户几百个MB的日志也就1秒钟
PHP不懂,还得讲究效率,占用资源少。
只知道nginx服务器可以配置referer防盗链,并且自定义log,将referer写进去
apache也肯定有
需要php分析log的话...定时导入到sql,然后清空log如何?
如果通过日志文件去分析图片使用情况,我觉得不是很可靠,就想刚才群主说的,日志文件只增不减,分析的话,准确度不好把握。
如果通过日志文件去分析图片使用情况,我觉得不是很可靠,就想刚才群主说的,日志文件只增不减,分析的话,准确度不好把握。
准确度的话,可以用 date_default_timezone_set () 为服务器的时区,然后用getdate();获取当前时间。crontabm每一分钟执行,只要正则出当前时间前一分钟的所有记录。
最主要的问题还是php如何高效的打开一个大文件的最后几条,可以多读取一点,设置每次读取为access_log的最后1000条记录。我的服务器有32GB内存,但是需要较低CPU开销。谢谢。
1、静态文件由 web 服务器直接读取,而php动态读取则需要先启动 php 解析程序,再由 php 程序读取
板板脚趾头都会知道谁的效率高
2、日志文件是只增不减的,并且已存在的内容也不会被修改。所以你只需记住上一次读到哪里,这次接着读就可以了
找到一个方法,http://httpd.apache.org/docs/2.2/programs/rotatelogs.html
用rotatelogs每分钟生成一个新的log文件。但为什么重启apache后没有生成想要的日志呢?
<IfModule log_config_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" com bined LogFormat "%h %l %u %t \"%r\" %>s %b" common <IfModule logio_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio </IfModule> CustomLog "logs/access_log" combined env=!dontlog CustomLog "|sbin/rotatelogs -f logs/my_log 60" combined env=!dontlog SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog SetEnvIf Remote_Addr "::1" dontlog</IfModule>
可能与 Apache 的版本有关 http://apache.chinahtml.com/logs.html
关于读取日志文件,你好像没有理解我的意思
日志文件是不定长记录文件,在没有索引的情况下,是无法定位到指定行的
不过自己构建索引文件也是没有必要的,毕竟日志里都是“旧闻”,读过了也就没必要再读了
文件函数集中有:
ftell -- 返回文件指针读/写的位置
fseek -- 在文件指针中定位
你只需在每次 fgets 之后用 ftell 读取偏移位置,并保存
下次再读时,取回上次保存的偏移位置,用 fseek 定位
就可接着读了
一定会有人说 fgets 一次一行效率太低,但用 fread 一次一大块时,尾部的半截行,处理起来也并非易事
谢谢,明白了。

PHP用於構建動態網站,其核心功能包括:1.生成動態內容,通過與數據庫對接實時生成網頁;2.處理用戶交互和表單提交,驗證輸入並響應操作;3.管理會話和用戶認證,提供個性化體驗;4.優化性能和遵循最佳實踐,提升網站效率和安全性。

PHP在數據庫操作和服務器端邏輯處理中使用MySQLi和PDO擴展進行數據庫交互,並通過會話管理等功能處理服務器端邏輯。 1)使用MySQLi或PDO連接數據庫,執行SQL查詢。 2)通過會話管理等功能處理HTTP請求和用戶狀態。 3)使用事務確保數據庫操作的原子性。 4)防止SQL注入,使用異常處理和關閉連接來調試。 5)通過索引和緩存優化性能,編寫可讀性高的代碼並進行錯誤處理。

在PHP中使用預處理語句和PDO可以有效防範SQL注入攻擊。 1)使用PDO連接數據庫並設置錯誤模式。 2)通過prepare方法創建預處理語句,使用佔位符和execute方法傳遞數據。 3)處理查詢結果並確保代碼的安全性和性能。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP可以輕鬆創建互動網頁內容。 1)通過嵌入HTML動態生成內容,根據用戶輸入或數據庫數據實時展示。 2)處理表單提交並生成動態輸出,確保使用htmlspecialchars防XSS。 3)結合MySQL創建用戶註冊系統,使用password_hash和預處理語句增強安全性。掌握這些技巧將提升Web開發效率。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。