首页
关于
Search
1
给你10个市场数据调研报告的免费下载网站!以后竞品数据就从这里找!
182 阅读
2
php接口优化 使用curl_multi_init批量请求
144 阅读
3
《从菜鸟到大师之路 ElasticSearch 篇》
107 阅读
4
2024年备考系统架构设计师
104 阅读
5
PHP 文件I/O
92 阅读
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
登录
Search
标签搜索
php函数
php语法
性能优化
安全
错误和异常处理
问题
vue
Composer
Session
缓存
框架
Swoole
api
并发
异步
正则表达式
php-fpm
mysql 索引
开发规范
协程
dafenqi
累计撰写
786
篇文章
累计收到
28
条评论
首页
栏目
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
副业
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
页面
关于
搜索到
560
篇与
的结果
2023-08-04
PHP下载CSS文件中的图片的代码
PHP下载CSS文件中的图片的代码作为一个资深并且专业的扒皮人员,在我从初三开始投入伟大的互联网中到现在积累了丰富的扒皮经验。我相信每个做web的程序员也都会有类似的经历。在扒皮过程中,必不可少的需要下载样式文件中的图片。碰到比较庞大的样式文件,其中可能会有上百个需要下载的图片,那么使用下面这段小代码是最为合适的了。< ?php /* More & Original PHP Framwork Copyright (c) 2007 - 2008 IsMole Inc. Author: kimi Documentation: 下载样式文件中的图片,水水专用扒皮工具 */ //note 设置PHP超时时间 set_time_limit(0); //note 取得样式文件内容 $styleFileContent = file_get_contents('images/style.css'); //note 匹配出需要下载的URL地址 preg_match_all("/url\((.*)\)/", $styleFileContent, $imagesURLArray); //note 循环需要下载的地址,逐个下载 $imagesURLArray = array_unique($imagesURLArray[1]); foreach($imagesURLArray as $imagesURL) { file_put_contents(basename($imagesURL), file_get_contents($imagesURL)); }
2023年08月04日
9 阅读
0 评论
0 点赞
2023-08-03
php运算符的短路特性
1、逻辑运算符:逻辑与(&&)和逻辑或(||),存在着短路特性PHP中有以下两个运算符具有短路的特性,他们是逻辑运算符的逻辑与(&&)和逻辑或(||),存在着短路这一特性。逻辑或,一真为真,假假为假(一真返回,全假跳过不返回)$a = 1; $flag = ($a == 1 || $c = 100); echo '$c的值:'.$c.' $flag的值:'.$flag; //输出 $c的值: $flag的值:1(true隐式转换为字符串1)逻辑或的运算结果是运算符(||)的两边 只要有一个为真,结果就返回“真”后就不再执行其它表达式 ,所以在这个语句里已经判断到$a的返回值是“真”,就不再执行给$c赋值,这样就形成了一个短路现象,所以后面的输出语句不输出内容。逻辑与,真真为真,一假为假(全真返回,一假跳过不返回)$a = 1; $flag = ($a == 2 && $c=100); echo '$c的值:'.$c.' $flag的值:'.$flag; //输出 $c的值: $flag的值:(flase隐式转换为空字符串)逻辑与的运算符(&&),逻辑与的运算方式是运算符的 两边表达式都为“真”才会继续执行其他语句而直接返回一个“假”值,所以这条语句也将不执行$c的赋值。2、按位运算符:按位与(&)和按位或(|),不存在短路特性按位运算符:按位与(&)和按位或(|),这两个运算符不存在短路特性,虽然它们的运算方式和逻辑与及逻辑或的运算方式相似,但他们没有存在短路现象,因为 按位与它是参加运算的表达式的同位运算都为1时才返回1否则返回0,按位或是同位运算不相同时返回1否则返回0。按位或,同位运算不相同时返回1否则返回0(按位的“位”是二进制)$a = 1; $flag1 = ($a == 1 | $c = 100); // 1 | 110 0100 = 110 0101 echo '$c的值:'.$c.' $flag1的值:'.$flag1; //输出 $c的值:100 $flag1的值:101按位与,同位运算都为1时才返回1否则返回0(按位的“位”是二进制)$a = 1; $flag1 = ($a == 1 & $c = 100); // 1 & 110 0100 = 0 $flag2 = ($a == 2 & $c = 100); // 0 & 110 0100 = 0 $flag3 = (1 & 1); // 1 & 1 = 1 $flag4 = (12 & 12); // 110 0110 & 110 0110 = 110 0110 $flag5 = (12 & 13); // 110 0110 & 110 0111 = 110 0110 $flag6 = (13 & 12); // 110 0111 & 110 0110 = 110 0110 echo '$c的值:'.$c.' $flag1的值:'.$flag1.' $flag2的值:'.$flag2.' $flag3的值:'.$flag3.' $flag4的值:'.$flag4.' $flag5的值:'.$flag5.' $flag6的值:'.$flag6; //输出 $c的值:100 $flag1的值:0 $flag2的值:0 $flag3的值:1 $flag4的值:12 $flag5的值:12 $flag6的值:12 3、短路特性在判断语句中的应用由于有了运算符的短路特性,我们可以 利用这一特性来编写一些判断语句,这样可以增加了程序的灵活性 ,例如我们可以使用在 打开一个文件时进行判断 :$file = fopen('a.txt','r') or die('文件不存在。'); //或者 --> https://tool.lu/coderunner/ $file = fopen('/code/main.php','r') || die('文件不存在。'); 通过这样设置了逻辑或运算符短路,这样就可以完成判断一个文件是否存在。die()命令是结束整个文件的执行,如果 程序运行到有die()时就结束了程序的运行 ,不再去执行该页面里的其他代码,输出错误提示。
2023年08月03日
44 阅读
0 评论
0 点赞
2023-08-02
PHP发送邮件(PHPMailer)
PHP发送邮件(PHPMailer)本文是讲利用PHPMailer来发送邮件方法。我们在做project的时候常常需要邮件的功能。其实PHP语言自己已经有一个发送邮件的方法(mail()方法),且不说这个方法实现的功能很少,想要利用mail()方法来发送邮件就必须要自己配置好smtp服务器,这里就不讲mail()的使用方法了(函数调用确实很简单)。所以,我们推荐使用第二种方法:PHPMailer。首先,先到http://phpmailer.sourceforge.net/这个地址去下载最新的PHPMailer的包(PHPMailer方法必须使用这个包)。下载完成后解压到相应的目录。可以看到解压后的文件夹里面的class.phpmailer.php(调用PHPMailer需要包含这个文件)示例代码:<?php require("phpmailer/class.phpmailer.php"); // 参数说明(发送到, 邮件主题, 邮件内容, 附加信息, 用户名) function smtp_mail( $sendto_email, $subject, $body, $extra_hdrs, $user_name){ $mail = new PHPMailer(); $mail->IsSMTP(); // send via SMTP $mail->Host = "smtp.163.com"; // SMTP servers $mail->SMTPAuth = true; // turn on SMTP authentication $mail->Username = "xuchao842363331"; // SMTP username 注意:普通邮件认证不需要加 @域名 这里是我的163邮箱 $mail->Password = "password"; // SMTP password 在这里输入邮箱的密码 $mail->From = "xuchao842363331@163.com"; // 发件人邮箱 $mail->FromName = "管理员"; // 发件人 $mail->CharSet = "UTF-8"; // 这里指定字符集! 指定UTF-8后邮件的标题和发件人等等不会乱码,如果是GB2312标题会乱码 $mail->Encoding = "base64"; $mail->AddAddress($sendto_email,"username"); // 收件人邮箱和姓名 $mail->AddReplyTo("yourmail@yourdomain.com","yourdomain.com"); //$mail->WordWrap = 50; // set word wrap 换行字数 //$mail->AddAttachment("/var/tmp/file.tar.gz"); // attachment 附件 //$mail->AddAttachment("/tmp/image.jpg", "new.jpg"); //$mail->IsHTML(true); // send as HTML // 邮件主题 $mail->Subject = $subject; // 邮件内容 $mail->Body = "hello!PHPMailer"; //$mail->AltBody ="text/html"; if(!$mail->Send()) { echo "error <p>"; echo "error: " . $mail->ErrorInfo; exit; } else { echo"success!"; } } ?>这里要说明一下:当字符集指定为GB2312的时候标题会乱码,这里指定为UTF-8不会出现乱码。其实,PHPMailer还有很多功能,比如可以添加附件等等,这里就不再演示了。这样在你需要用邮件功能的时候调用这个函数就可以了:<?php require("mail.php"); smtp_mail("38974891123@qq.com", "达芬奇", "", "", "username"); ?>总的来说,这个方法还是很简单的,读者感兴趣的可以学习一下
2023年08月02日
13 阅读
0 评论
0 点赞
2023-08-02
关于PHP性能的优化技巧
网上有无数关于PHP性能的优化技巧,有必要列出一张可供参考使用的清单。笔者收集的这些技巧来源较广,完整性不能保证。 由于数量较多,这些优化技巧没有经过测试。请各位看官在使用之前自行测试,毕竟这些技巧是否能派上用场,还是需要由PHP所在的独特环境所决定的。1、找到瓶颈(Finding the Bottleneck)面对一个性能问题 是, 第一步永远是找到问题产生的原因 ,而不是去看技巧列表。搞明白产生瓶颈的原因, 找到目标并且实施修复,然后再重新测试。 查找瓶颈只是万里长征的第一步,这里有些常用技巧,希望对最重要的第一步找到瓶颈能有所帮助。使用监控方法(比如监控宝) ,进行benchmark(基准问题测试)和监控,网络,特别是网络状况瞬息万变,做得好的话5分钟就可以找到瓶颈。剖析代码。 必须了解那部分代码耗时最多,在这些地方多多关注。想找到瓶颈,请 检查每个资源请求 (比如,网络、CPU、内存、共享内存、文件系统、进程管理、网络连接等等……)先 对迭代结构和复杂的代码 进行 benchmark在在真实负载下 用真实数据进行真实测试 ,当然,如果可以最好用产品服务器。2、缓存 (Caching)有些人认为 缓存是解决性能问题最有效的办法之一 ,试试这些:使用OPCODE(操作码)缓存,这样脚本就不会在每次访问时重新编译一次。比如:启用Windows平台上的windows缓存扩展。可以缓存opcode,文件,相对路径,session数据和用户数据。考虑在多服务器环境下使用分布式缓存在调用imap_header()之前先调用imap_headers()3、编译 vs. 解释(Compiling vs. Interpreting)将PHP源码编译成机器码。动态解释执行同样的编译,但它是按行执行的。编译为opcode是折中选择,它可以将PHP源码翻译为opcode,之后opcode再转为机器码。以下为关于编译与解释的相关技巧:上线之前将PHP代码编译为机器码。opcode缓存尽管并不是最好的选择,但依旧比解释型来得强。或者,考虑将PHP代码编译成一个C扩展。PHP的opcode编译器(bcompiler)还不能在产品环境中使用,但是开发者应该关注http://php.net/manual/en/book.bcompiler.php4、代码减肥 (Content Reduction)越少越快。 这些技巧可以帮助减少代码:每页提供更少的功能清理网页内容如果解释型执行,请清理注释和其他空白减少数据库查询5、多线程与多进程(Multithreading & Multiprocessing)由 快到慢 依次为:多线程(单一进程中)多进程(比如,pcntl_fork,计划任务)单进程(一行又一行)PHP不支持多线程,但是可以用C写多线程的PHP扩展。有一些办法可以使用多进程或模拟多进程,但支持的并不是很好,没准儿比单进程还慢。6、字符串(Strings)字符串处理,是大多数编程语言中最常用的操作之一。这里有些技巧可以帮我们让字符串处理速度更快一些:PHP的连接运算(点运算),是最快的链接方式避免在print中链接字符串,用逗号分割后用ECHO尽可能使用str_前缀的字符串函数替代正则表达式pos()比preg_mach()和ereg()都快有人说单引号包裹字符串比双引号更快,有人说没有区别。当然,如果想在字符串中引用变量,单引号没戏。如果想判断字符串长度是否小于某值(比如5),请使用isset($s[4])<5。如需将多个小字符串连接成一个大字符串,试着先开启ob_start输出缓存,再用echo输出到缓冲区,完成后使用ob_get_contents读取字符串7、正则表达式(Regular Expressions)正则表达式为们带来了灵活多样的比较与查找字符串的方法,但他的 性能开销 却着实不低尽可能使用STR_前缀的字符串处理函数代替正则表达式使用[aeiou]的不是(a|e|i|o|u)正则表达式越简单速度越快尽可能不要设置PCRE_DOTALL修饰符用^.代替.简化正则表达式。(比如使用a代替(a+)8、迭代结构 (Iteration Constructs (for, while))迭代(重复,循环)是最基本的结构化编程方法 ,很难想像有不使用它的程序。这里有些技巧,帮助我们 改进迭代结构的性能:尽可能将代码移出到循环外(函数调用、SQL查询等等……)使用i=maxval;while(i–)代替for(i=0;i<maxval;i++),这样可以减少一个操作,如果maxval是一个函数调用就更明显了。使用foreach迭代集合与数组9、选择结构 (Selection Constructs (if, switch))与迭代结构相同, 选择结构也是最基本的结构化编程方法 。以下技巧或许能改善性能:switches和else-if中,应该将最近常出现true的列在前面,较少出现true的请靠后有人说if-else比swtich/case快,当然,有人反对。用elseif替代else if.10、函数与参数 (Functions & Parameters)将函数的代码分解成小函数代码 可以 消除冗余 ,让代码具有 可读性 ,但代价是什么?这里有些技巧,以帮助更好的使用函数:引用传递出对象和数组,而不是传值如果只在一个地方使用,使用内联。如果在多个地方调用,考虑内联,但请注意可维护性了解你所用函数的复杂度。比如similar_text()为O(N^3),这意味着字符串长度增加一倍,处理时间将增加8倍不要通过“返回引用”来提升性能,引擎会自动优化它。以常规方式调用函数,而不是使用call_user_func_array()或eval()11、面向对象结构 (Object-Oriented Constructs)PHP的面向对象特性,可能会影响到性能 。以下提示可以帮助我们尽量减少这种影响:不是一切都需要面向对象, 性能的损失可能会超过其优点本身创建对象比较慢如果可以,尽可能时候用数组而不是对象如果一个方法可以静态化,请静态声明函数调用比派生类方法调用要快,派生类方法调用比基类调用要快考虑将基类中最常用的代码复制到派生类中,但要注意维护性隐患避免使用原生的getters与setters。如果不需要他们,请删除并且属性公开创建复杂的PHP类时,考虑使用单件模式12、Session处理 (Session Handling)创建sessions有很多好处,但 有时会产生没必要的性能开支 。以下技巧可以帮助我们最大限度减少性能开支:不要使用auto_start不要启用use_trans_sid将session_cache_limited设置为private_no_expire为虚拟主机(vhost)中的每个用户分配自己的目录使用基于内存的session处理,而不是基于文件的session处理13、类型转换 (Type Casting)从一种类型转换为另一种类型需要成本14、压缩(Compression)在传输前,压缩文本和数据:使用ob_start()在代码起始处使用ob_gzhandler()可以下载提速,但是注意CPU开支Apache的mod_gzip模块可以即使压缩15、错误处理(Error Handling)错误处理影响性能 。我们能做的是:记录错误日志,别再使用“@”抑制错误报告,抑制对性能一样有影响不要只检查错误日志,警告日志一样需要处理16、声明、定义与范围(Declarations, Definitions, & Scope)创建一个变量、数组或者对象,对性能都有影响:有人说,声明和使用全局变量/对象,比局部变量/对象要快,有人反对。请测试再决定。在使用变量前声明所有变量,不要声明不使用的变量在循环中尽可能使用$a[],避免使用$a=array(…)17、内存泄漏(Memory Leaks)如果内存分配后不释放 ,这绝对是个问题:坚持释放资源,不要指望自带/自动的垃圾回收使用完后尽量注销(unset)变量,尤其是资源类和大数组类型的使用完毕就关闭数据库连接每次使用ob_start(),记得ob_end_flush()或者ob_end_clean()18、不要重复发明轮子(Don’t Reinvent the Wheel)为什么要花费时间去解决别人已经解决的问题?了解PHP,了解它的功能和扩展。如果你不知道,可能会无法利用一些现成的功能使用自带的数组和字符串函数,它们绝对是性能最好的。前人发明的轮子,并不意味着在你的环境下吸能是最好的,多多测试19、代码优化(Code Optimization)使用一个opcode optimizer如果将被解释运行,请精简源码20、使用RAM(Using RAM Instead of DASD)RAM比磁盘快很多很多 ,使用RAM可以提升一些性能:移动文件到Ramdisk使用基于内存的session处理,而不是基于文件的session处理21、使用服务(Using Services (e.g., SQL))SQL经常被用来访问关系型数据库,但我们的PHP代码可以访问许多不同的服务。下面是一些访问服务是需要牢记的:不要一遍又一遍地问服务器向东的事情。使用memoization缓存第一次的结果,以后访问直奔缓存;在SQL中,使用mysql_fetch_assoc()代替mysql_fetch_array(),可以减少结果集中的整数索引。以字段名访问结果集,而不用索引数字。对于Oracle数据库,如果没有足够的可用内存,增加oci8.default_prefetch。将oci8.statement_cache_size设置为应用中的语句数请使用mysqli_fetch_array()替换mysqli_fetch_all(), 除非结果集将发送到其他层进行处理。22、安装与配置(Installation & Configuration)安装与配置PHP时,请考虑性能:添加更多内存删除竞争性的应用与服务只编译所需要用的扩展将PHP静态编译进APACHE使用-O3 CFLAGS开启所有编译器优化只安装所需使用的模块升级到最新版本的次要版本。主板本升级,等到第一次bug修复后再进行,当然,也别等太久为多CPU环境进行配置使用 -enable-inline-optimization设置session.save_handler=mm ,以 -with-mmto编译,使用共享内存使用RAM disk关闭resister_global和magic_quotes_*关闭expose_php关闭 always_populate_raw_post_data 除非你必须使用它非命令行模式下请关闭register_argc_argv只在.php文件中使用PHP优化max_execution_time, max_input_time, memory_limit与output_buffering的参数将Apache配置文件中allowoverride设置为none提升文件/目录的访问速度使用-march, -mcpu, -msse, -mmmx, and -mfpmath=sseto使CPU最优化使用MySQL原生驱动(mysqlnd)替换libmysql、mysqli扩展以及PDO MYSQL驱动关闭 register_globals、register_long_arrays以及register_argc_argv. 开启auto_globals_jit.23、其他(Other)还有些技巧比较难归类:使用include()、require(),避免使用include_once()和require_once()在include()/require()中使用绝对路径静态HTML被PHP生成的HTML要快使用ctype_alnum、ctype_alpha以及ctype_digit代替正则表达式使用简单的servlets或CGI代码在产品环境中使用时,尽可能写日志使用输出缓冲请使用isset($a)代替比较$a==null;请使用$a===null代替is_nul($a)需要脚本开始执行时间,请直接读取$_SERVER[’REQUEST_TIME’],而不是使用time()使用echo替代print使用前自增(++i)代替后自增(i++),大多数编译器现在都会优化,但是他们不优化时,请保持这样的写法。处理XML,使用正则表达式代替DOM或者SAXHASH算法:md4, md5, crc32, crc32b, sha1比其他的散列速度都要快使用spl_autoload_extensions时,文件扩展名请按最常用–>最不常用的顺序,尽量排除掉压根不用的。使用fsockopen或fopen时,使用IP地址代替域名;如果只有一个域名,使用gethostbyname()可以获取IP地址。使用cURL速度会更快。但凡可能,用静态内容代替动态内容。
2023年08月02日
15 阅读
0 评论
0 点赞
2023-07-28
PHP异步框架总结
目前主要有:国产swooleworkerman国外framework-xrevoltrevoltreactphpamphpasync
2023年07月28日
47 阅读
0 评论
0 点赞
1
...
107
108
109
...
112