Deprecated
: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in
/www/wwwroot/testblog.58heshihu.com/var/Widget/Archive.php
on line
1057
首页
关于
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基础
页面
关于
搜索到
17
篇与
的结果
2023-08-10
关于 php json接口开发的注意问题
关于 php json接口开发的注意问题一是注意跨域问题.需要加 Access-Control-Allow-Origin:* http头.(针对于前端浏览器脚本调用接口)二是如果请求的header里 Content-Type: 是 application/json,则需要用 file_get_contents("php://input");接收.如果用 swoole 框架的话,需要用$request->rawContent()接收.如果请求header里Contente-Type是 multipart/form-data,或application/x-www-form-urlencoded或application/octet-stream则需要用 $_POST($_GET)或$_FILES来接收.Ps :js 代码调用接口示例如下1.要加contentType: "application/json; charset=utf-8",2.需要使用JSON.stringify 转换json对象或把对象转为字符形式,如'{"aa":22}'(json两边加单引号)var submit_sync = function() {$.<a class="wpal-linked-keyword" href="https://ajax.p2hp.com/" target="_blank">ajax</a>({ type: "post", url: 'add-post-json.php', async: false, // 使用同步方式 // 1 需要使用JSON.stringify 否则格式为 a=2&b=3&now=14... // 2 需要强制类型转换,否则格式为 {"a":"2","b":"3"} data: JSON.stringify({ a: parseInt($('input[name="a"]').val()), b: parseInt($('input[name="b"]').val()), now: new Date().getTime() // 注意不要在此行增加逗号 }), contentType: "application/json; charset=utf-8", dataType: "json", success: function(data) { $('#result').text(data.result); } // 注意不要在此行增加逗号 }); }PHP请求接口的代码如下:<?phpfunction curl_post($url, $data, $json=true){ $ch = curl_init(); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_URL, $url); if ($json && is_array($data)) { $data = json_encode($data, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES); } curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_NOSIGNAL, 1); //注意,毫秒超时一定要设置这个 curl_setopt($ch, CURLOPT_TIMEOUT_MS, 2500); //超时毫秒,cURL 7.16.2中被加入。从PHP 5.2.3起可使用if ($json) {curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf-8','Content-Length:'.strlen($data)));} $relt = curl_exec($ch); var_dump($relt); curl_close($ch); return $relt;}$data=array('key'=>'value');curl_post('http://192.168.6.76:9523/?op=test', $data, true);开发中一般不要用前端代码去调用非本系统的接口地址.参考 https://blog.csdn.net/wangjun5159/article/details/47781443https://blog.csdn.net/wangjun5159/article/details/49644507
2023年08月10日
11 阅读
0 评论
0 点赞
2023-08-10
解决PHP脚本pdo MySQL has gone away错误 pdo加ping功能
解决PHP脚本pdo MySQL has gone away错误 pdo加ping功能<?php class NPDO { private $pdo; private $params; public function __construct() { $this->params = func_get_args(); $this->init(); } public function __call($name, array $args) { try { return call_user_func_array(array($this->pdo, $name), $args); } catch (PDOException $e) { } } public function ping() { try { $this->pdo->query('SELECT 1'); $error=$this->pdo->errorInfo();//由于pdo扩展的bug,有时不抛出异常,这里要加上错误信息 if ($error[2]=='MySQL server has gone away') { $this->init(); } } catch (PDOException $e) { $this->init(); } return true; } private function init() { try { $class = new ReflectionClass('PDO'); $this->pdo = $class->newInstanceArgs($this->params); } catch (PDOException $e) { } } } $flysystempdo = new NPDO('mysql:dbname=test;host=localhost', 'root','root'); $flysystempdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); while (true) { $flysystempdo->ping(); $sql = 'SELECT 1'; $aa=$flysystempdo->query($sql); var_dump($aa); sleep(1); }//另外2种http://blog.csdn.net/fdipzone/article/details/53117541http://blog.csdn.net/coprophet/article/details/18364641
2023年08月10日
9 阅读
0 评论
0 点赞
2023-08-10
php session阻塞页面分析及优化 (session_write_close session_commit使用)
php session阻塞页面分析及优化 (session_write_close session_commit使用)这个问题很多做PHP开发朋友应该都有遇到过,一个启用了session_start 页面,由于执行时间过长。导致用户访问另外一个很简单的启用session_start页面一直阻塞着。 直到第一个页面执行完了。第二个页面才可以读取。这个就是,我们常说的,session阻塞机制。也就是说session是有锁的,为防止并发的写会话数据,php自带的的文件保存会话数据是加了一个互斥锁(在session_start()的时候)。程序执行session_start(),此时当前程序就开始持有锁。程序结束,此时程序自动释放Session的锁。如果同一个客户端同时并发发送多个请求(如ajax在页面同时发送多个请求),且脚本执行时间较长,就会导致session文件阻塞,影响性能。因为对于每个请求,PHP执行session_start(),就会取得文件独占锁,只有在该请求处理结束后,才会释放独占锁。这样,同时多个请求就会引起阻塞。我用file 存放用户sessionsession默认以文件保存,当一个用户访问session_start页面后,这个时候,就会默认创建一个包含session_id文件名,并且这个时候,会对文件进行锁定。如果这个用户点击链接,又访问一个该站session_start网页。这是,由于session_id一样,这个页面也有读取锁定该用户存放session文件。 由于,第一个页面没有执行完,它一直锁定了该文件。 第2个页面就不能获取锁,一直处于等待状态。这样一个看似小的问题,实际上,如果网站上面有大量用户访问,会导致session读取文件一直阻塞等待着。用户浏览器一直跟服务器保持连接,会消耗很多服务器资源。web服务器活跃连接数也会增大,可能很快就会耗费完连接资源,出现拒绝服务器。我用memcache 存放用户session用memcache保存用户session,相比读取文件有很大速度提升。而且可以做到多服务器共享session。确实很方便,这个时候,我们发现不会出现用文件保存session锁定清理。memcached读取时候,是共享的,不会出现等待。但是,我们会发现,memcached连接数,还是会保持着。并且,连接数会增加,如果这个时候,你设置的memcached连接数过小,你会发现,很快memcached就挂死了。 这也是,做memcache接管session时候,经常遇到问题。 有时候,web服务器很多,session(memcache)很少。发现memcache莫名其妙死掉,可能跟这个有关系。太多反映很慢的页面(启动session),会导致占用了大量memcached连接数。改变session使用习惯、优化调用方法其实,通过file或者session,如果处理耗时页面,都会带来服务器资源很大消耗。其实我们一般写入session或者读取时候,如果自己能够控制。用完了,就关闭掉文件锁,或者mem连接。就会自动释放资源,其实,php里面的:session_write_close,session_commit 函数就能做到改功能。我们看下下面代码执行过程:<?phpini_set('session.save_path', './tmp/');function open($save_path, $session_name) {echo __FUNCTION__,"<br/>"; return (true);}function close(){echo __FUNCTION__,"<br/>"; return (true);}function read($id){echo __FUNCTION__,"<br/>";}function write($id, $sess_data){echo __FUNCTION__,"<br/>"; return (true);}function destroy($id){echo __FUNCTION__,"<br />"; return(true);}function gc($maxlifetime){echo __FUNCTION__,"<br />"; return true; }session_set_save_handler("open", "close", "read", "write", "destroy", "gc");register_shutdown_function('test');function test(){ echo __FUNCTION__,"";}session_start();echo 'aaaaa',"";/*结论->session_start开启后, 会自动执行open,read函数。等页面执行完后,会执行shutdown函数.最后后会把session写入进去,然后执行close关闭文件从session_start 到页面结束,会一直锁定文件或者保持连接的。*/然后通过1个实例子来理解 , 先执行 session2.php 代码, 20秒内执行 session3.phpsession2.php 文件<?php//执行 session2.php和session3.php, /*因为 session2.php 脚本一直没有结束,结束后 session才会执行写入和关闭操作 (看session1.php 结论), session一直被锁定了因此执行session3.php 时会发现 一直处于阻塞状态。 */session_start();$_SESSION['uname'] = 'lily';//当有session写入时会阻塞sleep(20);/*//如果用以下代码 就没问题了, 立即提交 写入关闭session_start();$_SESSION['uname'] = 'lemon';session_commit();sleep(20);*/session3.php 文件<?phpsession_start();echo $_SESSION['uname'];总结://可以用 session_commit (别名 session_write_close) 立即执行写入关闭 /*session_start();$_SESSION['aaaa'] = 1000;session_commit(); //执行commit后,直接会调用,wirte,close操作*//*1.只读取session页面,建议打开后,就直接commit,这是$_SESSION变量已经生成了。2.有对session进行写入页面,建议修改完$_SESSION后,直接调用commit3.多次打开并且写入,这个不建议使用,比较打开文件,写入都是耗费时间的。如果能一次搞定的,就不要做多次了。 除非,中间执行很耗时的业务。后记:其实,使用完session,随手commit也不是坏事,养成习惯后。可以节省性能,减少服务器开销。是个不错选择!欢迎大家交流!*/
2023年08月10日
15 阅读
0 评论
0 点赞
2023-08-09
php的mkdir()函数的权限诡异问题探究
php的mkdir()函数的权限诡异问题探究这篇文章主要介绍了php的mkdir()函数创建文件夹比较安全的权限设置方法,遇到的情况是系统umask影响了mkdir的指定权限参数比期望要小,使用chmod函数则没有这个问题,需要的朋友可以参考下问题描述:使用以下php代码创建了一个目录,期望目录的权限是0777,实际结果是0755mkdir('./aa/',0777);分析与测试结果:1.mkdir()函数指定的目录权限只能小于等于系统umask设定的默认权限。如linux默认的umask一般0022, 即创建目录的默认权限是0755, 所以这时php mkdir('./aa/',0777) 得到目录的权限是0755.xw@xw-X201:~/Desktop/dd/aa$ umask0022xw@xw-X201:~/Desktop/dd/aa$ php -r "mkdir('./xw/',0777);"xw@xw-X201:~/Desktop/dd/aa$ php -r "mkdir('./xw1/',0755);"xw@xw-X201:~/Desktop/dd/aa$ php -r "mkdir('./xw2/',0747);"xw@xw-X201:~/Desktop/dd/aa$ ll总用量 20drwxrwxrwx 5 xw xw 4096 2012-06-01 11:58 ./drwxr-xr-x 6 xw xw 4096 2012-06-01 11:26 ../drwxr-xr-x 2 xw xw 4096 2012-06-01 11:57 xw/drwxr-xr-x 2 xw xw 4096 2012-06-01 11:58 xw1/drwxr--r-x 2 xw xw 4096 2012-06-01 11:58 xw2/把系统默认权限改为777,mkdir()可以指定更大权限了xw@xw-X201:~/Desktop/dd/aa$ umask 000xw@xw-X201:~/Desktop/dd/aa$ php -r "mkdir('./xw2/',0777);"xw@xw-X201:~/Desktop/dd/aa$ ll总用量 12drwxrwxrwx 3 xw xw 4096 2012-06-01 12:08 ./drwxr-xr-x 6 xw xw 4096 2012-06-01 11:26 ../drwxrwxrwx 2 xw xw 4096 2012-06-01 12:08 xw2/2.chmod()函数不受系统umask影响,可以设置比系统默认权限大的权限。xw@xw-X201:~/Desktop/dd/aa$ umask0022xw@xw-X201:~/Desktop/dd/aa$ php -r "mkdir('./xw1/',0777);"xw@xw-X201:~/Desktop/dd/aa$ php -r "mkdir('./xw2/');"xw@xw-X201:~/Desktop/dd/aa$ php -r "mkdir('./xw3/');chmod('./xw3/',0777);"xw@xw-X201:~/Desktop/dd/aa$ ll总用量 20drwxrwxrwx 5 xw xw 4096 2012-06-01 12:12 ./drwxr-xr-x 6 xw xw 4096 2012-06-01 11:26 ../drwxr-xr-x 2 xw xw 4096 2012-06-01 12:11 xw1/drwxr-xr-x 2 xw xw 4096 2012-06-01 12:11 xw2/drwxrwxrwx 2 xw xw 4096 2012-06-01 12:12 xw3/3.系统的mkdir命令可以设置大于默认值的权限。xw@xw-X201:~/Desktop/dd/aa$ umask0022xw@xw-X201:~/Desktop/dd/aa$ mkdir -m0777 xwxw@xw-X201:~/Desktop/dd/aa$ ll总用量 12drwxrwxrwx 3 xw xw 4096 2012-06-01 12:18 ./drwxr-xr-x 6 xw xw 4096 2012-06-01 11:26 ../drwxrwxrwx 2 xw xw 4096 2012-06-01 12:18 xw/总结:php若要创建一个有读写权限的目录,最好使用以下代码,不要直接使用mkdir函数指定权限,以避免系统umask的影响mkdir('./xw/');chmod('./xw/',0777);
2023年08月09日
5 阅读
0 评论
0 点赞
2023-08-09
PHP企业应用开发十大问题
如何解决全文检索的问题(不依赖第三方搜索引擎)如何解决计划任务的问题(不依赖操作系统计划任务)如何用户二次开发无法升级的问题如何和其他格式文件进行数据的交换。常见安全问题的防护(xss, sql注入,附件上传,csrf等)如何用PHP做聊天服务器。(做轻量级的解决方案)如何解决PHP环境部署问题。如何选择PHP的开发框架。如何解决消息通知的问题。如何保护自己的代码?
2023年08月09日
13 阅读
0 评论
0 点赞
1
2
3
4