PHP
72个主题在此版块
-
- 0 篇回复
- 109 次查看
Docker 安装 执行 Docker 安装命令 curl -fsSL https://get.docker.com/ | sh 启动 Docker 服务 sudo service docker start 查看 Docker 是否正常工作 sudo service docker status 更改用户权限 sudo groupadd docker # 新建用户组 sudo gpasswd -a $USER docker #将登录用户加入docker组 newgrp docker #更新用户组 查看当前镜像 docker images 搜索可用镜像 docker search 名称 下载镜像 docker pull 名称 启动当前镜像 docker run -it -d -p 8000:80 镜像编号/名称 /bin/sh -it #表示用终端操控 -d #表示后台运行 -p #表示把容器的 80 端口映射到 物理机的 8000 端口 查看当前运行容器 docker ps 停止当前运行容器 docker stop 容器编号 进入容器内部 docker exec -it 容器编号 bash apache2搭建 搜索有关于 apache2 的容器 docker search apache2 这里选用第一个的 ubuntu + apache2 环境 下载镜…
KaiWn的最后回复, -
- 0 篇回复
- 116 次查看
1、问题 直接放在WEB目录下,文件不安全,没有认证可以直接访问; PHP认证通过后返回WEB目录下的真实文件地址,不安全,访问一次后后续可以直接访问; 用PHP读MP4文件然后再输出:加载速度、内存占用、快进快退都会有问题; 2、解决思路: 采用php认证后nginx播放 转hls后加密播放 3、PHP认证后nginx播放 在nginx中配置: # 这里使用internal做下载防护,只允许内部程序(PHP等)访问,这样外部直接访问这个地址就会提示404错误 location ~ \.mp4$ { internal; # 这里的路径配置是可选的,可以配置到网站外部,和其他location里的配置路径是一个意思,可以更好的防止文件被通过网址下载 root /opt/video; } 在PHP中在认证通过后,写: header('X-Accel-Redirect:/20220822/06.mp4') 将带认证的php文件作为video标签的src,就能播放服务器上:/opt/video/20220822/06. mp4 文件。 存在的问题及解决方法: nginx这种写法可能导致所有的mp4请求都走/opt/video,如果之前有已经存放在web目录下直接访问的mp4文件,需要兼容已有程序,这么做: …
KaiWn的最后回复, -
- 0 篇回复
- 116 次查看
crotab定时任务: 在服务器上设置定时器,来执行特定的任务脚本,比如php XXX或者 python XXX,或者 go run *** crontab基本用法: - crontab时间设置: # 5个时间表示:分别为以下 * * * *:表示:分、时、日、月、周 crontab -e: 添加crontab定时任务, 例如:设置每分钟执行 进入项目目录,并且php artisan命令 # 设置每分钟执行1次该命令 * * * * * cd ~/dnmp/www/ali-php php artisan schedule >> /dev/null 2>&1 crontab -l: * 列出当前用户的所有定时任务 - crotab -r: * 删除当前用户的定时任务 备注: 如果crontab -e添加定时任务失败,可能是当前默认编辑器为vi,需要设置为vim, # 编辑文件,修改默认编辑器:vim ~/.zshrc (或者.bash_profile) export EDTTOR=vim # 然后,source ~/.zshrc,使其生效,再重新crontab -e来添加定时任务
KaiWn的最后回复, -
- 0 篇回复
- 105 次查看
文件包含本质就是代码注入,原理:注入一段用户能够控制的脚本或代码,让服务器端执行。 1.本地文件包含漏洞——能够打开并包含本地文件的漏洞 测试pikachu文件包含靶场: ①随机选择,出现文件包含 http://127.0.0.1/pikachu-master/vul/fileinclude/fi_local.php?filename=file2.php&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2# ②修改file2.php可以造成文件读取(结合目录遍历漏洞,如果被过滤可改变编码方式) 尝试读取本机host文件 ../../../../Windows/System32/drivers/etc/hosts 由于不知道文件包含几级路径,因此多次尝试增.// http://127.0.0.1/pikachu-master/vul/fileinclude/fi_local.php?filename= ../../../../../Windows/System32/drivers/etc/hosts &submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2# ③成功获取本地HOST ④漏洞避免 a.避免目录遍历漏洞: 开启open_basedir,作用限制在某个特定目录下PHP能打开的文件,作用与safe_mode是否开启无关。 注…
KaiWn的最后回复, -
- 0 篇回复
- 117 次查看
什么是序列化 序列化可以实现将对象压缩并格式化,方便数据的传输和存储。 为什么要序列化? PHP 文件在执行结束时会把对象销毁,如果下次要引用这个对象的话就很麻烦,所以就有了对象序列化,实现对象的长久存储,对象序列化之后存储起来,下次调用时直接调出来反序列化之后就可以使用了。 学习序列化要了解的基本内容。 类(Class): 类的定义包含了数据的形式以及对数据的操作。 对象:对象是类的实例。 方法:类中定义的函数。 <?php //创建一个类 Test class Test { //定义 3 个属性,最后序列化后看一下这 3 个属性序列化后的结果。 private $a = "private"; public $b = "public"; protected $c = "protected"; } //创建一个对象,对象是类的实例。 $test = new Test(); //序列化 test 这个对象 $data = serialize($test); //打印序列化后的对象 echo $data; ?> 展示结果(前提条件,php只有再apache下可以运行,之前我创建了txt,发现无法运行,避免踩坑) 序列化之后的结果,每个字符都具有具体含义 O:4:"Test":3: {s:7:"Testa";s:7:"private"; s:1:"b";s:6:"public"; s:4:"*c";s:9:"protected";} …
KaiWn的最后回复, -
- 0 篇回复
- 110 次查看
摘要:在PHP爬虫(1)中详细了介绍了CURL抓取HTML数据的技术。采集数据处理也是爬虫技术中非常重要的部分。处理HTML数据可以用字符串查找,也可以利用正则表达式,但采用Dom处理是最高级的方法。 现在我们要抓取中国军网首页“军媒要闻要论”第一条内容, 通过浏览器工具查看网页元素,通过console获取数据。通过下图我们可以看到,在浏览器中我们可以方便调用Jquery的dom查找函数,轻松找到数据,PHP中是否也有这样的工具可以很方便的处理DOM? 在github上查找php dom parse,我们找到sunra/php-simple-html-dom-parser,使用用户还挺多的。下面我们介绍如何使用PhpDomParse组件,分别介绍直接引用、composer、ThinkPhp中如何使用。 1.直接引用 首选下载组件文件夹,在当前工程目录中执行 git clone https://github.com/sunra/php-simple-html-dom-parser.git 此时,工程目录下就会多出php-simpple-html-dom-parser文件夹,文件夹目录如下图 引用HtmlDomParaer.php <?php include "./php-simple-html-dom-parser/Src/Sunra/PhpSimple/HtmlDomParser.php"…
KaiWn的最后回复, -
构建nginx资源 创建nginx配置文件 root@deploy:/dockerfile/project/nginx# cat nginx.conf user nginx; worker_processes auto; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; #daemon off; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; …
KaiWn的最后回复, -
- 0 篇回复
- 109 次查看
在一个站长的空间看到这样的文章,觉得会有用,先记录下来 原字符串1,2,3,4,5,6, 去掉最后一个字符",",最终结果为1,2,3,4,5,6 代码如下: $str = "1,2,3,4,5,6,"; $newstr = substr($str,0,strlen($str)-1); echo $newstr; //echo 1,2,3,4,5,6 系统自带的函数即可实现这样的效果,两种方法: substr($str, 0, -1) //函数2 rtrim($str, ",")
KaiWn的最后回复, -
- 0 篇回复
- 98 次查看
蓝宝石留言本php版v4.5采用原生php编写,在php5.6~php7.x下调试通过。本留言本使用了utf-8编码。 include/config1.php是数据库连接参数的配置文件, include/config2是留言板参数的配置文件, include/config1.php可以直接编辑或者在安装时修改, include/config2.php和include/configpass.php可以直接编辑,或者登录留言本后台进行更改。 请保证上述三个文件可写,然后运行install.php安装。 留言本开头页面的部分和结尾页面部分的修改请修改include/header.php和include/footer.php 本留言本实现了留言审核开关功能,悄悄话功能,回复功能和防止sql注入,防跨站提交,留言本的用户名和密码,留言本的背景和文字颜色均可以在后台更改。 本留言本不支持html语言,但是支持输入ubb代码。 登录后台请访问adminlogin.php,默认用户名为admin,默认密码为pass 若有任何疑问或者配置问题请加我官网中的QQ咨询,或者可以加我微信。我会根据各位的意见建议陆续推出新的版本。有一些网友+我QQ后,向我要数据库的sql文件,我再次强调一下:数据库只要运行install.php,填写了正确的mysql用户名和密码和数据库名,点击按钮后就会自动建立。 更新日志: …
KaiWn的最后回复, -
- 0 篇回复
- 104 次查看
1.先查出MAMP下面集成的PHP版本 cd /Applications/MAMP/bin/php ls -ls 2.编辑修改 .bash_profile 文件(没有.bash_profile 文件的情况下回自动创建) sudo vim ~/.bash_profile 在文件的最后输入以下信息,然后保存退出 export PATH="/Applications/MAMP/bin/php/php7.2.20/bin:$PATH" 红色的部分就是你要切换的php版本类型(看项目需求选择) 3. 执行以下命令 source .bash_profile 如果报错的话请先进入 ls ~ 目录再执行,没报错的话证明你已经操作成了。 输入命令:php -v 查看 图一为未切换前的版本,图二为切换成功的 7.2.20
KaiWn的最后回复, -
判断是否为空 if (!$cart_num || !$cart_info) return []; 数组循环 $compute_arr = ['coupon_price', 'integral_price', 'postage_price', 'use_integral', 'one_brokerage', 'two_brokerage', 'sum_true_price']; foreach ($compute_arr as $field) { if (!isset($cart_info[$field]) || !$cart_info[$field] || $is_gift) { $new_cart_info[$field] = 0; continue; } $scale = 2; if ($field == 'use_integral') $scale = 0; if (!$i) {//拆出 $new_cart_info[$field] = bcmul((string)$cart_num, bcdiv((string)$cart_info[$field], (string)$cart_info['cart_num'], 4), $scale); } else { $field_number = bcmul((string)bcsub((string)$cart_info['cart_num']…
KaiWn的最后回复, -
- 0 篇回复
- 132 次查看
PHP74 Remi软件源安装向导 Remi's RPM repository 官网 http://rpms.remirepo.net/ 国内清华镜像 https://mirrors.tuna.tsinghua.edu.cn/remi/ 仓库设置和php安装向导 https://rpms.remirepo.net/wizard/ 向导系统设置 设置方法 RHEL 7 provides PHP version 5.4 in its official repository Command to install the EPEL repository configuration package: yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm Command to install the Remi repository configuration package: yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm Command to install th…
KaiWn的最后回复, -
- 0 篇回复
- 101 次查看
近段时间手头有个PHP的源码,对它挺感兴趣所以就用Docker运行了PHP8的容器,代码运行起来之后发现数据库无法访问,根据报错信息看出是MySQL的扩展没启用,百度溜达了好久也没找到一个帖子讲明白如何启用扩展,自己摸索了半天终于搞明白,在这里分享给一下 安装扩展的教程在文档中有记录,根据文档描述镜像中已经内置了许多常用的扩展,只是没有安装,且文档中写出了操作扩展的命令 我下载的镜像是PHP8版本:docker pull php:8.0-fpm,容器起名为php8 进入到容器中,执行php -m命令,可以看到打印出mysqlnd,查看该扩展所在位置 [root@localhost webs]# docker exec -it php8 /bin/bash root@8e288e13b95c:/var/www/html# php -m root@8e288e13b95c:/var/www/html# find / -name mysqlnd 执行install命令安装mysqlnd,然后再次查看该扩展所在位置,会发现多了一个目录 root@8e288e13b95c:/var/www/html# docker-php-ext-install mysqlnd root@8e288e13b95c:/var/www/html# find / -name mysqlnd 移动到多出来的目录中,查看与MySQL相关的文件,会看到mysqli,这个才是真正要安装的扩展,执行安装 roo…
KaiWn的最后回复, -
字符串操作 字符串查找 # 查找首次出现的位置,不区分大小写 stripos(string, needle [, offset]) echo stripos("xyC", "c"); //2 # 查找首次出现的位置,区分大小写 strpos(string, needle [, offset]) echo strpos("ABCabc", "c"); //5 # 查找最后一次出现的位置,不区分大小写 strripos(string, needle, [, offset]) echo strripos("ABCabcabcABC", "c"); //11 # 查找最后一次出现的位置,区分大小写 strrpos(string, needle, [, offset]) echo strrpos("ABCabcabcABC", "c"); //8 字符串截取 # 截取字符串 substr(string,start,length) echo substr("Hello world", 6); //world echo substr("Hello world", 6, 2); //wo # 截取中文字符串 mb_substr(string, start, length, encoding编码) echo mb_substr("你好啊", 0, 2, 'utf-8'); //你好 # 去除字符串两边的空格 trim(string, charlist删除那些字符) echo " Hello"; // …
KaiWn的最后回复, -
- 0 篇回复
- 107 次查看
首先下载composer安装包,地址 https://getcomposer.org/Composer-Setup.exe 然后下一步,这里选择你的PHP版本,就是PHP所安装的位置 然后一直下一步,直到看到下图这样的就可以了
KaiWn的最后回复, -
- 0 篇回复
- 116 次查看
omposer安装和laravel本地环境配置(十分钟左右) 1.安装composer (1)需要安装php(以phpstudy集成开发环境为例) 桌面找到phpstudey 图标,鼠标右击 ->选择 ‘文件所在的位置’-> 按下back(<----)键 即(F12下面的键)-> 打开Extensions文件夹->选择php文件夹->选择一个php版本点开文件夹 配置环境变量 然后连续点击三个确定按钮 是否配置成功测试: Windows 徽标键 (键盘左下角第二个 四个方块的键) 输入cmd。如图: 点击确定 然后输入php -v 如图: (2)安装composer 下载这个文件(最好用迅雷下载 快) https://getcomposer.org/download/2.0.8/composer.phar 把该文件复制到php根目录,也就是和 php.exe 在同一级目录。 然后在 PHP 安装目录下新建一个 composer.bat 文件,并将下列代码保存到此文件中。 @php "%~dp0composer.phar" %* 该过程来源于composer官网 检查新开启一个cmd窗口(开启方式如上图Windows 徽标键 +R 输入cmd ) 直接输入命令 : co…
KaiWn的最后回复, -
- 0 篇回复
- 115 次查看
$save_dir = storage_path('app') . '/public/' . mt_rand(99, 999) . time() . '_video' . ".mp4"; //保存原视频 $out_dir = storage_path('app') . '/public/' . mt_rand(99, 999) . time() . '_smallVideo' . ".mp4"; //压缩后的视频 $rs_video = $this->reduceVideo($oss_url, $out_dir, $save_dir); if ($rs_video == false) { continue; //压缩视频失败 } //视频压缩 public function reduceVideo($oss_url,$out_dir,$save_dir){ $r = file_put_contents($save_dir, file_get_contents($oss_url)); if(!$r) return false; $toSize = "8M"; //最大不超过8M //判断文件大小 $file_size = filesize($save_dir); $file_size = intval($file_size / 1048576); if($file_s…
KaiWn的最后回复, -
- 0 篇回复
- 118 次查看
PHP 中的安全性 在编写 PHP 代码时,牢记以下安全漏洞非常重要,以避免编写不安全的代码。 漏洞类型 这些是您在编写 PHP 代码时会遇到的常见漏洞。我们将在下面更深入地讨论一些。 Cross Site Request Forgery由于程序员没有检查请求从哪里发送而导致的应用程序中的一个漏洞——这种攻击被发送给高权限级别的用户以获得对应用程序的更高级别的访问权限。 跨站脚本程序员在将输入输出到浏览器之前没有清理输入(例如博客上的评论)导致的应用程序漏洞。它通常用于在浏览器中运行恶意 javascript 来进行攻击,例如窃取会话 cookie 以及其他恶意操作,以在应用程序中获得更高级别的权限。 本地文件包含由程序员需要用户提供的文件输入并且在访问请求的文件之前未清理输入而导致的应用程序漏洞。这会导致文件被包含在不应该包含的位置。 远程文件包含由程序员需要用户提供的文件输入并且在访问请求的文件之前未对输入进行清理而导致的应用程序漏洞。这会导致从远程服务器中提取文件并将其包含在不应该存在的位置。 会话劫持攻击者获得对用户会话标识符的访问权并能够使用另一个用户的帐户来冒充他们而导致的漏洞。这通常用于访问管理用户的帐户。 Session Identifier Acquirement Session Identifier Acquirement 是攻击者能够猜测用户的会话标识符或利用应用程序本身或用户浏览器中的漏洞获取会话标识符而导致的漏洞。 SQL 注入由程序员在将输入包含到数据库查询之…
KaiWn的最后回复, -
- 0 篇回复
- 95 次查看
php:php以脚本的方式运行 一、php源码 1 [root@rockylinux php]# 2 [root@rockylinux php]# uname -a 3 Linux rockylinux 4.18.0-372.19.1.el8_6.x86_64 #1 SMP Tue Aug 2 16:19:42 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux 4 [root@rockylinux php]# 5 [root@rockylinux php]# pwd 6 /root/user/lidawei/program/php 7 [root@rockylinux php]# 8 [root@rockylinux php]# ls 9 test.php 10 [root@rockylinux php]# 11 [root@rockylinux php]# whereis php 12 php: /usr/bin/php /usr/lib64/php /etc/php.d /etc/php.ini /usr/share/php /usr/share/man/man1/php.1.gz 13 [root@rockylinux php]# 14 [root@rockylinux php]# cat test.php 15 #!/usr/bin/php 16 17 18 <?…
KaiWn的最后回复, -
Options +FollowSymLinks IndexIgnore */* RewriteEngine on # if a directory or a file exists, use it directly RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # otherwise forward it to index.php RewriteRule . index.php SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 <IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] </IfModule>
KaiWn的最后回复,