PHP实现浏览器文件下载图片或者php文件

 更新时间:2016年11月25日 15:30  点击:1524
PHP实现浏览器文件下载图片或者php文件需要通过header来输出下载否则会进行解析无法正确的下载文件哦,下面的我们就来看看吧。

超链接下载

如果浏览器支持超链接的方式下载文件,会在点击超链接的时候自动下载文件。

下面我们来测试一下通过超链接下载文件:

<a href="/Uploads/test.zip">通过超链接的方式下载文件</a><br>
 
当我们点击的时候如下所示:

超链接下载文件

通过超链接下载图片:
我们通过超链接下载图片时,会直接在浏览器打开显示,然后我们需要再存储到指定路径保存下来:

 
<a href="/Uploads/QC8054R7QPGQ_1000x500.jpg">通过超链接的方式下载图片</a><br>
 
效果是这样的:

超链接下载图片

通过程序下载

HTML端一行代码
 
<a href="download.php?filename=QC8054R7QPGQ_1000x500.jpg">通过程序的方式来下载图片</a>
 
download.php代码

我们是通过Header请求头来发送文件下载信息,指定下载的是附件,下载后的文件名,content-length来指定文件的大小,然后通过readfile函数来读取文件内容而实现文件下载:

<?php
 
$filename = $_GET['filename'];
header('content-disposition:attachment;filename='. basename($filename));
header('content-length:'. filesize($filename));
 
readfile($filename);
 
效果如下:

php多线程并发实现这个问题我们要如何实现呢,知道在java中多线程非常的简单但在php中多线程估计并不好操作,下面我们来看php多线程并发例子。


java里多线程就是一个new thread的事情,php依赖apache靠着linux底层有一个多线程的办法。

今天说说如果你无法操控apache的服务器,如何模拟php并发

<?php
if(function_exists('date_default_timezone_set')) {
    date_default_timezone_set('PRC');
}
 
function a()
{
 $time = time();
 
 sleep(3);
 $fp = fopen('result_a'.$time.'.log', 'w');
 fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn");
 fclose($fp);
}
function b()
{
 $time = time();
 
 sleep(3);
 $fp = fopen('result_b'.$time.'.log', 'w');
 fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn");
 fclose($fp);
}
 
if(!isset($_GET['act'])) $_GET['act'] = 'a';
 
if($_GET['act'] == 'a')
{
 a();
}
else if($_GET['act'] == 'b') b();
?>
以上代码,在本地写入一个文件。
如果你访问 localhost/a.php 在两个浏览器标签尽可能快的同时打开,发现两个文件创建时间相差为3秒

但是如果你访问localhost/a.php?act=b 另一个访问/a.php?act=a 你发现两个文件创建的时间几乎差不多。

对于apache来说同样的url意味着一个线程(我们或者说是进程),但是不同的URL意味着可以并发。

如果php内部有下载的动作

function runThread()
{
 down("http://localhost/test/a.php?act=a");
}
if($_GET['act'] == 'run')
{
 echo 'start:';
 
 runThread();
 
 echo ' End';
}
http://localhost/test/a.php?act=run

http://localhost/test/a.php?act=run&s=2

只要主访问的url不同,则认为是不同的进行,意味着并发。文件创建时间不为3秒

本地有Linux服务器的朋友也可以借助linux来进行模拟并发

<?php
for ($i=0;$i<10;$i++) {
echo $i;
sleep(5);
}
?>
上面存成test.php, 然后写一段SHELL代码

#!/bin/bash
for i in 1 2 3 4 5 6 7 8 9 10
do
php -q test.php &
done

错误信息提示就是在程序开发测试时碰到错误给出提示了,今天我们来看一篇关于PHP代码开启错误信息提示方法,具体的细节步骤如下文介绍。

不显示调试错误

之前没有开启之前,出现这样的错误提示,并不是我们希望的,这样没有给我们任何有意义的调试信息:

解决办法

在入口处统一设置如下代码即可:

 ini_set("display_errors", "On");
error_reporting(E_ALL);

php.ini的话,代码如下:

找到display_errors = On 修改为 display_errors = off

下面我们来看一篇关于PHP “Notice: Undefined variable” 和 “Notice: Undefined index”报错,希望这篇文章能够帮助到各位朋友,有兴趣的朋友可以进来看看吧。


解决Notice: Undefined variable报错

虽然 PHP不需要预先声明变量,但是依然强烈推荐大家声明以避免因为忘记给变量赋值而引起的一些安全性漏洞及可能的BUG。所以PHP以非常低的报警级别(E_NOTICE)来提醒大家正在使用一个未声明的变量。

当然解决以上报错有如下几种方法,根据场景选择适合自己的:

1.(推荐)提前声明变量,例如当你想要为一个未声明的变量连接字符串的时候。或者使用isset()/!empty()来检查是否已经声明:

$value = ""; //初始化变量
             //"" 当下面需要对其进行字符串操作时
             //0  当下面需要对其数字操作时
//isset()
$value = isset($_POST['value']) ? $_POST['value'] : '';
//empty()
$value = !empty($_POST['value']) ? $_POST['value'] : '';
2.设置自定义的(error handler)来处理E_NOTICE错误

set_error_handler('myHandlerForMinorErrors', E_NOTICE | E_STRICT)
3.禁止E_NOTICE报警

error_reporting( error_reporting() & ~E_NOTICE )
强烈建议使用第一种方法

解决Notice: Undefined index报错

当你访问数组中尚未定义的索引时会出现 Undefined index问题。

1.在访问数组索引前检查是否存在,可以使用isset()或者array_key_exists()

//isset()
$value = isset($array['my_index']) ? $array['my_index'] : '';
//array_key_exists()
$value = array_key_exists('my_index', $array) ? $array['my_index'] : '';

[!--infotagslink--]

相关文章

  • 使用PHP+JavaScript将HTML页面转换为图片的实例分享

    这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • Photoshop古装美女图片转为工笔画效果制作教程

    今天小编在这里就来给各位Photoshop的这一款软件的使用者们来说说把古装美女图片转为细腻的工笔画效果的制作教程,各位想知道方法的使用者们,那么下面就快来跟着小编一...2016-09-14
  • Python 图片转数组,二进制互转操作

    这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • php抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • JavaScript判断浏览器及其版本信息

    本篇文章主要分享了通过window.navigator来判断浏览器及其版本信息的实例代码。具有一定的参考价值,下面跟着小编一起来看下吧...2017-01-23
  • js实现浏览器打印功能的示例代码

    这篇文章主要介绍了js如何实现浏览器打印功能,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-15
  • jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮

    jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮...2013-10-13
  • 利用JS实现点击按钮后图片自动切换的简单方法

    下面小编就为大家带来一篇利用JS实现点击按钮后图片自动切换的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-10-25
  • Photoshop枪战电影海报图片制作教程

    Photoshop的这一款软件小编相信很多的人都已经是使用过了吧,那么今天小编在这里就给大家带来了用Photoshop软件制作枪战电影海报的教程,想知道制作步骤的玩家们,那么下面...2016-09-14
  • js实现上传图片及时预览

    这篇文章主要为大家详细介绍了js实现上传图片及时预览的相关资料,具有一定的参考价值,感兴趣的朋友可以参考一下...2016-05-09
  • js识别uc浏览器的代码

    其实挺简单的就是if(navigator.userAgent.indexOf('UCBrowser') > -1) {alert("uc浏览器");}else{//不是uc浏览器执行的操作}如果想测试某个浏览器的特征可以通过如下方法获取JS获取浏览器信息 浏览器代码名称:navigator...2015-11-08
  • php实现文件下载实例分享

    举一个案例:复制代码 代码如下:<?phpclass Downfile { function downserver($file_name){$file_path = "./img/".$file_name;//转码,文件名转为gb2312解决中文乱码$file_name = iconv("utf-8","gb2312",$file_name...2014-06-07
  • python opencv通过4坐标剪裁图片

    图片剪裁是常用的方法,那么如何通过4坐标剪裁图片,本文就详细的来介绍一下,感兴趣的小伙伴们可以参考一下...2021-06-04
  • 使用PHP下载CSS文件中的图片的代码

    共享一段使用PHP下载CSS文件中的图片的代码 复制代码 代码如下: <?php //note 设置PHP超时时间 set_time_limit(0); //note 取得样式文件内容 $styleFileContent = file_get_contents('images/style.css'); //not...2013-10-04
  • js代码判断浏览器种类IE、FF、Opera、Safari、chrome及版本

    第一种,只区分浏览器,不考虑版本 复制代码 代码如下:function myBrowser(){ var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串 var isOpera = userAgent.indexOf("Opera") > -1; if (isOp...2014-05-31
  • 详解Vue Cli浏览器兼容性实践

    这篇文章主要介绍了详解Vue Cli浏览器兼容性实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-09
  • PHP swfupload图片上传的实例代码

    PHP代码如下:复制代码 代码如下:if (isset($_FILES["Filedata"]) || !is_uploaded_file($_FILES["Filedata"]["tmp_name"]) || $_FILES["Filedata"]["error"] != 0) { $upload_file = $_FILES['Filedata']; $fil...2013-10-04
  • 微信小程序如何获取图片宽度与高度

    这篇文章主要给大家介绍了关于微信小程序如何获取图片宽度与高度的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-10
  • C#中图片旋转和翻转(RotateFlipType)用法分析

    这篇文章主要介绍了C#中图片旋转和翻转(RotateFlipType)用法,实例分析了C#图片旋转及翻转Image.RotateFlip方法属性的常用设置技巧,需要的朋友可以参考下...2020-06-25