• [技术干货] PHP8.3更新内容新特性及支持版本探究【转】
    支持版本除了庆祝新的版本发布以后,也需要注意一下:PHP 8.0 的生命周期即将结束,PHP 8.0 早已在2022 年 11 月 26 日结束了积极支持,而安全支持也将在 PHP8.3 发布的三天后2023 年 11 月 26 日停止。了解更多信息可查看Supported Versions。新特性PHP 8.3 引入了许多新功能。然而,它的功能比 PHP 8.1 或 PHP 8.2 相对较少。PHP 8.3 的主要新特性:类型化类常量动态类常量获取#[\Override]属性只读修改添加json_validate函数添加Randomizer::getBytesFromString()方法添加Randomizer::getFloat()和Randomizer::nextFloat()方法类型化类常量现在可以在定义常量时,增加类型。 // PHP &lt; 8.3 interface I {     // We may naively assume that the PHP constant is always a string     const PHP = 'PHP 8.2'; }  class Foo implements I {     const PHP = []; // But it may be an array... }  // PHP 8.3 interface I {     const string PHP = 'PHP 8.3'; }  class Foo implements I {     const string PHP = []; }  // Fatal error: Cannot use array as value for class constant Foo::PHP of type string 动态类常量获取在之前的版本中获取类的常量,除了直接调用以外,想要动态获取只能通过拼接后使用constant来实现,而现在可以直接使用变量来获取常量。这个方式在枚举类型中也可以使用。// PHP < 8.3 class Foo {     const PHP = 'PHP 8.2'; } $searchableConstant = 'PHP'; var_dump(constant(Foo::class . "::{$searchableConstant}")); // PHP 8.3 class Foo {     const PHP = 'PHP 8.3'; } $searchableConstant = 'PHP'; var_dump(Foo::{$searchableConstant});添加#[\Override]属性通过给方法添加 #[\Override] 属性,PHP 将确保在父类或实现的接口中存在同名的方法。添加该属性可以清楚地表明重载父类方法是有意为之,并简化了重构过程,因为重载父类方法的删除会被检测到。// PHP < 8.3 use PHPUnit\Framework\TestCase; final class MyTest extends TestCase {     protected $logFile;     protected function setUp(): void     {         $this->logFile = fopen('/tmp/logfile', 'w');     }     protected function taerDown(): void     {         fclose($this->logFile);         unlink('/tmp/logfile');     } } // The log file will never be removed, because the // method name was mistyped (taerDown vs tearDown). // PHP 8.3 use PHPUnit\Framework\TestCase; final class MyTest extends TestCase {     protected $logFile;     protected function setUp(): void     {         $this->logFile = fopen('/tmp/logfile', 'w');     }     #[\Override]     protected function taerDown(): void     {         fclose($this->logFile);         unlink('/tmp/logfile');     } } // Fatal error: MyTest::taerDown() has #[\Override] attribute, // but no matching parent method exists只读修改只读属性现在可以在魔术方法 __clone 方法中修改一次,以实现只读属性的深度克隆。// PHP < 8.3 readonly class Foo {     public \DateTime $dateTime;     function __construct(\DateTime $dateTime) {         $this->dateTime = $dateTime;     }     public function __clone()     {         $this->dateTime = clone $this->dateTime;     } } $today = new Foo(new \DateTime()); $tomorrow = clone $today; // Fatal error: Cannot modify readonly property Foo::$dateTime // PHP 8.3 readonly class Foo {     public \DateTime $dateTime;     function __construct(\DateTime $dateTime) {         $this->dateTime = $dateTime;     }     public function __clone()     {         $this->dateTime = clone $this->dateTime;     } } $today = new Foo(new \DateTime()); $tomorrow = clone $today; $tomorrow->dateTime->modify('+1 day');添加json_validate函数在之前的版本中想要验证一个字符是否是语法上有效的JSON,需要先decode然后判断错误码,而现在可以直接调用json_validate函数。同时 json_validate() 性能比 json_decode() 要好不少,并且使用更加简单。// PHP < 8.3 function json_validate(string $string): bool {     json_decode($string);     return json_last_error() === JSON_ERROR_NONE; } var_dump(json_validate('{ "test": { "foo": "bar" } }')); // true // PHP 8.3 var_dump(json_validate('{ "test": { "foo": "bar" } }')); // true一次 Lint 多个文件PHP CLI 二进制文件的 -l 允许检查 PHP 文件以确保它没有语法错误。以前只允许一次检查一个文件,这意味着如果想检查整个项目,则必须为每个应用程序文件调用一次它。从 PHP 8.3 开始允许传递多个文件。// PHP < 8.3 php -l index.php // PHP 8.3 php -l src/**/*.php
  • [技术干货] PHP实践:获取网络上图片的长宽以及图片类型-转载
     🚀一、前言 在开发Web应用程序中,我们经常需要从网络上获取图片并对其进行处理。有时候,我们可能需要知道图片的长宽和类型信息,以便进行进一步的操作或展示给用户。在PHP中,我们可以使用getimagesize()函数来获取网络图片的长宽和类型信息。 🚀二、实现逻辑 🔎2.1 getimagesize()函数简介 getimagesize()是一个内置函数,用于获取图片的各种属性信息,包括宽度、高度、类型等。该函数可以对本地图片文件或通过URL访问的网络图片进行操作。在本文中,我们将重点介绍如何使用该函数获取网络图片的信息。  🔎2.2 获取网络图片信息的步骤 下面是使用PHP获取网络图片信息的具体步骤:  🍁2.2.1 第一步:获取网络图片的地址 首先,我们需要获取网络图片的地址。假设我们要获取的网络图片地址为https://example.com/image.jpg。  🍁2.2.2 第二步:使用getimagesize()函数获取图片信息 接下来,我们使用getimagesize()函数来获取图片的信息。将网络图片地址作为参数传递给getimagesize()函数,并将返回的结果保存在一个变量中。  $imageUrl = "https://example.com/image.jpg"; $imageInfo = getimagesize($imageUrl); 🍁2.2.3 第三步:提取图片的长、宽和类型 getimagesize()函数返回的结果是一个数组,其中包含了图片的属性信息。我们可以通过索引来访问这些信息。  $imageWidth = $imageInfo[0]; $imageHeight = $imageInfo[1]; $imageMime = $imageInfo['mime']; 🍁2.2.4 第四步:打印结果或进行其他操作 最后,我们可以直接打印出获取到的图片信息,或根据需要进行进一步处理。例如,我们可以将获取到的图片信息展示给用户,或根据图片类型进行相应的处理。  echo "图片宽度:".$imageWidth."px<br>"; echo "图片高度:".$imageHeight."px<br>"; echo "图片类型:".$imageMime; 🚀三、 完整示例代码 下面是获取网络图片信息的完整代码示例:  $imageUrl = "https://www.xxx.com/demo.jpg"; $imageInfo = getimagesize($imageUrl);  $imageWidth = $imageInfo[0]; $imageHeight = $imageInfo[1]; $imageMime = $imageInfo['mime'];  echo "图片宽度:".$imageWidth."px<br>"; echo "图片高度:".$imageHeight."px<br>"; echo "图片类型:".$imageMime; 以上就是使用PHP获取网络图片长宽和类型信息的步骤和代码。  🚀四、演示 下面使用真实的一个图片来演示一下上面的代码。  看到输出如下:  🚀五、 总结 在本文中,我们介绍了如何使用PHP获取网络图片的长宽和类型信息。通过使用getimagesize()函数,我们可以轻松地获取到网络图片的各种属性信息,提供更好的用户体验或进行进一步的处理操作。这个功能非常有用,在开发Web应用程序时经常会遇到。希望本文对大家有所帮助! ———————————————— 版权声明:本文为CSDN博主「黑夜开发者」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_21891743/article/details/132466781 
  • [技术干货] PHP+Nginx经常出现502、504原因与解决方法 —转载
     很多新手刚开始做网站可能感觉不到502,504的问题,当等你网站到达了一定水平的时候,流量起来的时候,你会发现经常会遇到502、504类似的问题。  一、什么是502状态码? 502 Bad Gateway:作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。  二、502 Bad Gateway 原因一般有哪些? 将请求提交给网关如php-fpm执行,但是由于某些原因没有执行完毕导致php-fpm进程终止执行。这个问题与网关服务如php-fpm的配置有关。  php-fpm.conf配置文件中有两个参数就需要你考虑到,分别是max_children和request_terminate_timeout。  max_children最大子进程数,在高并发请求下,达到php-fpm最大响应数,后续的请求就会出现502错误的。可以通过netstat命令来查看当前连接数。  request_terminate_timeout设置单个请求的超时终止时间。还应该注意到php.ini中的max_execution_time参数。当请求终止时,也会出现502错误的。  当积累了大量的php请求,你重启php-fpm释放资源,但一两分钟不到,502又再次呈现,这是什么原因导致的呢? 这时还应该考虑到数据库,查看下数据库进程是否有大量的locked进程,数据库死锁导致超时,前端终止了继续请求,但是SQL语句还在等待释放锁,这时就要重启数据库服务了或kill掉死锁SQL进程了。  三、什么是504状态码? 504 Gateway Time-out:作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应。  四、504 Gateway Time-out 原因一般有哪些? 504错误一般是与nginx.conf 配置有关。主要与以下几个参数有关:  fastcgi_connect_timeout  fastcgi_send_timeout  fastcgi_read_timeout  fastcgi_buffer_size  fastcgi_buffers  fastcgi_busy_buffers_size  fastcgi_temp_file_write_size  fastcgi_intercept_errors  特别是前三个超时时间。如果fastcgi缓冲区太小会导致fastcgi进程被挂起从而演变为504错误。  五、关于PHP+Nginx经常出现502、504的解决方法 由于不同的原因,解决方法也是不一样的,一定要根据实际的情况去分析。例如,以下是我以前遇到的502的相关问题。  1、Nginx 502 Bad Gateway 原因与解决方法  2、Nginx报错:upstream timed out (110: Connection timed out) 原因与解决方法  今天重点说下我遇到504问题的解决方法。  由于我用的是PHP+Nginx+百度云加速CDN,然后,百度云加速CDN一直给我报504错误,我排查了很多也没有找到原因。  1、最初我以为修改nginx.conf,增加如下“error Connection timed out and 504 error”的代码可以解决这个问题。   [root@localhost /]# vim nginx.confserver {        listen 80;         server_name zabbix.gree.com;         access_log /roobo/logs/nginx/zabbix.gree.com_access.log main;         error_log /roobo/logs/nginx/zabbix.gree.com_error.log error ;         root /roobo/webserver/zabbix;        index index.html index.htm index.php;           location / {             try_files $uri $uri/ /index.php$is_args$args;         }         location ~ \.php$ {             try_files $uri =404;             include fastcgi.conf;             fastcgi_pass 10.7.19.195:9000;         }          #error Connection timed out and 504 error        large_client_header_buffers 4 16k;        client_max_body_size 30m;        client_body_buffer_size 128k;        fastcgi_connect_timeout 300;        fastcgi_read_timeout 300;        fastcgi_send_timeout 300;        fastcgi_buffer_size 64k;        fastcgi_buffers   4 32k;        fastcgi_busy_buffers_size 64k;        fastcgi_temp_file_write_size 64k; } 经过测试,并没有任何效果。  2、我又自信的以为是我用了FirewallD防火墙的原因,结果我关闭它,测试也没有效果,照样报504错误。  3、最后当再出现504错误的时候,我直接暴力操作,杀死php-fpm,再重启,就可以恢复正常,从而我判断是php的问题。经过我的排查,发现是“pm.max_requests”这个参数的问题,我最初设置的是204000,现在设置的是20400即可恢复正常,没有再出现504错误了,平均负载 Load Average也在正常的范围类。  4、但是过一段时间后,又会出现“504连接超时”这个问题。  5、最终,经过我几天的测试,我最终php-fpm.conf参数调整如下即恢复正常:  注意:这里我顺便说一下,我以前配置的参数是 pm.max_spare_servers = 60; pm.max_requests = 204800;   pm = dynamic pm.start_servers = 20 pm.min_spare_servers = 20 pm.max_spare_servers = 30 pm.max_requests = 20480 总结:  通俗点讲,设置“pm.max_requests”参数小一点,就是让php-fpm能够自动的频繁重启,关于具体设置多大?要根据你的服务器配置以及流量状况来分析,自己可以去做测试。  经过我的的测试,我发现pm.max_requests设置太大会出现504 Gateway Time-out,pm.max_requests设置太小,平均负载 Load Average又会超出正常值的范围,甚至更高。 ———————————————— 版权声明:本文为CSDN博主「执刀人的工具库」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/winkexin/article/details/130628949 
  • [技术干货] Ansible roles的使用 :安装nginx与php教程
    【Ansible Roles使用教程:安装Nginx与PHP】  Ansible Roles是一种组织和复用Ansible代码的方法,用于将相关的配置和任务组织在一起,使代码更加模块化和易于管理。在本教程中,我将演示如何使用Ansible Roles来安装Nginx和PHP,并在CentOS 7上部署一个简单的Web服务器。  创建Ansible项目目录结构: 首先,创建一个Ansible项目目录,并在其中创建以下目录结构:  ansible-project/ ├── inventory/ │   └── hosts ├── roles/ │   ├── nginx/ │   │   ├── tasks/ │   │   │   └── main.yml │   │   └── templates/ │   │       └── nginx.conf.j2 │   └── php/ │       └── tasks/ │           └── main.yml └── site.yml 编辑hosts文件: 在 inventory/hosts文件中定义要部署Nginx和PHP的目标主机:  [web_servers] server1 ansible_host=服务器IP地址 编辑Nginx角色的main.yml文件: 在 roles/nginx/tasks/main.yml文件中定义安装Nginx的任务:  --- - name: Install Nginx   yum:     name: nginx     state: present - name: Start Nginx   service:     name: nginx     state: started     enabled: yes - name: Copy Nginx configuration file   template:     src: nginx.conf.j2     dest: /etc/nginx/nginx.conf - name: Restart Nginx   service:     name: nginx     state: restarted  编辑PHP角色的main.yml文件: 在 roles/php/tasks/main.yml文件中定义安装PHP的任务:  --- - name: Install PHP   yum:     name: php     state: present - name: Install PHP modules   yum:     name: "{{ item }}"     state: present   with_items:     - php-fpm     - php-mysql     - php-gd     - php-xml - name: Start PHP-FPM   service:     name: php-fpm     state: started     enabled: yes  编辑Nginx配置模板: 在 roles/nginx/templates/nginx.conf.j2文件中定义Nginx的配置模板,可以根据需要自定义Nginx配置。 编辑site.yml文件: 在 site.yml文件中定义整个安装过程,包括目标主机和要安装的角色:  --- - name: Install Nginx and PHP   hosts: web_servers   become: yes   roles:     - nginx     - php 执行部署: 最后,执行部署命令,运行整个Ansible Playbook: ansible-playbook -i inventory/hosts site.yml Ansible将会连接到目标主机并按照定义的Roles顺序安装Nginx和PHP。完成后,你将在目标主机上拥有一个运行Nginx和PHP的简单Web服务器。 通过使用Ansible Roles,你可以更好地组织和管理你的Ansible Playbook,使部署过程更加模块化和可维护。同时,Ansible的自动化能力能够帮助你快速在多台主机上部署相同的配置,提高效率和一致性。 ———————————————— 原文链接:https://blog.csdn.net/tiansyun/article/details/134025613 
  • [技术干货] 多级部署LNMP项目
    多机部署LNMP是一个很重要的项目,L代表Linux系统,N代表Nginx服务, M代表Mysql服务,P代表PHP服务。LNMP平台应该是应用比较广泛的网站服务架构。随着Nginx在企业中的使用越来越多。LNMP架构也受到越来越多的linux系统工程师的青睐。因此,掌握多级部署LNMP是非常重要的。vim lnmp.sh#!/bin/bash#build lnmp#移除原有的yum仓库,并备份到/root/old目录下[-d /root/old] $$rm-rf /root/old;mkdir /root/old || mkdir /root/oldmv /etc/yum.repos.d/* /root/oldcp -r /root/old/*/etc/yum.repos.d/#更新安装epel源rpm -Uvh https://mirror.webtatic.com/yu,/e17/epel-release.rpmsleep 10#更新安装Centos源rpm -Uvh https://mirror.webtatic.com/yum/e17/webtatic-release.rpmyum clean allyum repolistsleep 10#安装依赖软件包yum -y install openssl-devel gcc-c++ gcc makeecho waiting install php......yum install -y php56w-fpm php56w-common pjp56w-mbstring php56w-mcrypt php56w-pdo php56w-mysqlnd php56w-bcmath php56w-xml php56w-ldap#修改相关配置sed -i 's/post_max_size=8M/post_max_size=16M/g' /etc/php.inised -i 's/max_execution_time=30/max_execution_time=300/g'/etc/php.inised -i 's/max_input_time=60/max_execution_time=300/g/etc/php.ini'sed -i 's/listen,allowed_clients=127.0.0.1/#listen.allowed_clients=127.0.0.1/g'/etc/php-fpm.d/www.conf#启动并设置开机自启动systemctl enable php-fpmsystemctl start pho-fpmsleep 10echo waiting for nginxyum -y install nginxnginx -tnginxsleep 10echo waiting for mysql15.6......[-d /usr/local/src]||mkdir -p /usr/local/srccd/usr/local/srcrpm -Uvh http://dev.mysql.com/get/mysql-community-release -e17-5.noarch.rpmyum repolist all |grep ''mysql.*-community.*''yum -y install mysql-community-serversystemctl enable mysqldsystemctl start mysqld.serviceecho $ip >> passwords.txtawk -F:'/temporary password""/{print $NF}' /var/log/mysqld.log>>passwords.txtsleep3以上是在一台服务器上实现部署LNMP,项目需求是要在多态服务器上实现,其思路和多级部署mysql一样,需要使用shell循环来实现多态机器的LNMP部署。vim ip.txt10.0.104.510.0.104.2710.0.104.3410.0.104.13610.0.104.108#!/bin/bash#mainwhile read ipdo{ping -c 1-w 2 $ ip>/dev/nullif [$?-eq 0];thenscp -r lnmp.sh root@ip:/tmp/ssh root@ip "/tmp/lnmp.sh"}&done <ip.txtwaitecho all finish以上代码是针对ip.txt文件中的主机ip地址进行多机部署LNMP。首先是先ping一下ip.txt文件中的ip地址,判断机器是否正常;然后把安装lnmp脚本复制到多态服务器上/tmp/下,远程使用管理员权限,执行安装LNMP脚本,如果显示 all finish 则表示所有服务器安装都已完成。
  • [问题求助] 使用华为Obs官方提供PHP版本SKD上传图片文件报错,频繁出现下列问题导致上传文件失败
    ERROR - 2022-12-07 18:05:29 --> Severity: Warning --> fread(): SSL: Connection reset by peer /dev/third_party/huaweicloud-obs/vendor/guzzlehttp/psr7/src/Stream.php 231ERROR - 2022-12-07 17:32:56 --> Severity: error --> Exception: Argument 1 passed to Obs\ObsClient::Obs\Internal\{closure}() must be an instance of GuzzleHttp\Exception\RequestException, instance of GuzzleHttp\Exception\ConnectException given, called in /dev/third_party/huaweicloud-obs/vendor/guzzlehttp/promises/src/Promise.php on line 204 /dev/third_party/huaweicloud-obs/Obs/Internal/SendRequestTrait.php 640
  • [问题求助] composer 安装后php SDK 下载的目录找不到
    【功能模块】composer  php SDK 安装【操作步骤&问题现象】1、composer require huaweicloud/huaweicloud-sdk-php:3.0.54-rc 安装完成后如下图:1  图:2  代码中的依赖库 sdk 文件加载不上HuaweiCloud\SDK\ 这个文件夹加载不上是哪里没有配置好吗?【截图信息】图:1图:2【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] 【华为云DWS】【ODBC】PHP ODBC连接公有云上的DWS数据库怎么操作啊
    【功能模块】【操作步骤&问题现象】1、2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [技术干货] 有人懂php吗
    求助
  • [新手课堂] PHP基础语法1
    ### php标签 php常用标签如下: ?php //这里写php代码 ?> 以上方式是php最常见的使用标签方式。 PHP脚本标签 以上这种方式也是可以的。但是不推荐使用,因为这种方式通常是用来写javascript代码的。 短标签方式 ? //php代码 ?> 以上这种短标签方式也是可以的,但是现在php默认已经不支持了,即要想使用这种短标签方式需要在php的配置文件(php.ini)中找到 short_open_tag = Off //默认这里是关闭 更改为short_open_tag = On 重启服务就可以使用这种短标签方式了。如果是用的一些集成环境 比如:phpstudy 可能默认就已经开启了这种短标签方式。 ### php注释 PHP注释有两大类:单行注释和块注释(多行) 单行注释有两种 双斜杠:// ​ //输出hello world 井号:# ​ \#输出helloworld 块注释:/* 注释内容 */ ​ /* 这里是注释 以下内容是某个业务逻辑 */ 块注释通常在函数(方法)的地方使用,形式如下 ``` /*`` ``* 函数功能`` ``* @param 参数解释`` ``* @return 返回值解释`` ``*`` ``* @author,作者`` ``* @2014-8-10`` ``*/ ``` 注意:PHP在解析PHP代码的时候,会跳过注释,不会保留注释信息。 要求:以后大家写的代码,必须要有注释。凡是有业务逻辑的地方,都必须使用注释详细说明。 ## PHP变量 ## 变量:可以变化值的东西 ### 定义变量 语法:$变量名 ​ $name ​ $school_number ​ $age1 ​ $age2 ​ $3a = 'variable' //报语法解析错误!不合法变量!变量不能以数字开头! 变量命名规则 \1. 必须以$符号开始 \2. 变量名可以由字母,下划线和数字自由组合 \3. 不能以数字开头 \4. 可以是中文 \5. 变量命名通常需要见名之意 \6. 变量名字有多个单词组成的时候,可以使用两种方式 a) 驼峰法:schoolName b) 下划线:school_name \7. php中变量一般是在定义的时候就赋值 ## 常量 ## 一旦被定义,就不能被修改,只能被使用的“量”叫做常量。 语法如下: define('常量名',常量值); 常量使用的语法:直接使用常量名 常量的使用 1.某个值不需要变化的时候。某些数学常量如π 2.用于整个网站使用。 3.凡是能使用常量去做的事情都可以使用变量去替代。常量是用来规范数据保证数据不被修改。 常量命名规则 \1. 常量不能使用$符号 \2. 其他命名规则与变量基本一致 \3. 常量命名通常使用全部大写字母,多单词的常量都是使用下划线方式。 \4. 常量与变量一样都区分大小写 常量不能被修改和删除 PHP脚本执行结束后内存是如何处理的? 1.什么叫做PHP脚本执行结束? 指的是当PHP引擎将用户请求的某个PHP脚本文件(index.php)的最后一行PHP代码执行完毕,称之为脚本执行结束。 2.脚本结束后内存如何处理? PHP脚本所占用的所有内存都会被释放,被操作系统回收。 ## 数据类型 数据类型是针对各种(变量)的值而言,而不是针对变量本身。 PHP有三大数据类型:标量,复合,特殊 标量数据类型(简单数据类型) 整型:int或者integer,整数,包括正整数,负整数和0 $num = 5; //说num变量的数据类型,其实指的是num变量所指向的值5的数据类型 整型在系统内存中占4个字节保存数据。 PHP还支持定义其他进制:八进制和十六进制 八进制:数值以0开始,后面跟八进制序列 $num = 011; //十进制9 十六进制:数值以0x开始,后面跟十六进制序列 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f $num = 0x11; //十进制17 浮点型:float,double,精度 通常,float占用4个字节保存数据,单精度,表示7个精度 double占用8个字节保存数据,双精度,表示15个精度 实际上PHP中float也是占用8个字节保存数据。 $float = 1.0; //普通的带小数的浮点数 $float = 2.3e3;//科学计数法保存的浮点数 因为浮点数会丢失精度,所以通常不用浮点数比较大小。 什么情况下使用浮点型?什么情况下使用整型? 一般对于精度要求不是那么高的,但是数值又非常大的可以使用浮点数,其他情况下基本都不使用。 时间戳:从1970年到当前时间的秒数称之为时间戳(格林威治时间) PHP提供了一个函数:time()获得时间戳 PHP用来保存时间都是使用时间戳来处理,date函数可以将时间戳转化成时间 字符串:string,凡是带引号包好的字符都可以称之为字符串 PHP中字符串的表示方式有三种:单引号,双引号,定界符 //定界符这里暂时先不记录 单引号:将字符串用单引号包裹起来 双引号:将字符串用双引号包裹起来 单引号和双引号的区别? 区别有两点: 1. 双引号中能够使用更多的转义字符\r\n\t单引号:\' 双引号:\"\r\n\t 2. 双引号中能够解析PHP变量 布尔:bool和Boolean,布尔类型只有两个值true和false 哪些数据会被当做FALSE处理? 需要通过比较的形式来判断是否为false 0:整型0 0.0:浮点0 '0':字符串0 null:空 '':空字符串 复合数据类型:数组和对象 特殊数据类型如下: NULL:定义的变量的值为NULL或者变量被删除 资源:所有外部数据的操作全部称之为资源类型数据 如PHP操作数据库中,mysql_connect连接成功返回的一个结果称之为资源(连接资源) ## 系统预定义变量 系统定义的变量称之为预定义变量,预定义变量有9个 如下所示: $_POST:接收用户表单post方式提交的所有数据 $_GET:接收用户表单get方式提交的所有数据 $_REQUEST:接收用户get方式,post方式提交的数据,还有cookie数据 $_FILES:接收用户上传的文件信息 $_SESSION:存放session数据(存放在服务器) $_COOKIE:存放cookie数据(存放在浏览器) $GLOBALS:全局变量 $_SERVER:保存服务器信息 $_ENV:保存系统环境信息 ## 系统预定义常量 PHP_OS:操作系统内核 PHP_VERSION:当前PHP的版本 PHP_INT_SIZE:int类型所占的字节数 PHP_INT_MAX:int类型能表示的最大值 魔术常量:可以自动变化的常量 如下所示: __FILE__:当前脚本的文件路径(绝对路径) __LINE__:当前所在的行数 __DIR__:当前脚本所在的目录(PHP4以后才有) __FUNCTION__:当前函数的名字 __METHOD__:当前方法的名字(类中的函数) ## 可变变量 什么是可变变量? 通过一个得到一个变量的值,将该值再次当做一个变量名从而得到另外一个变量的值。 可变变量demo案例如下: ```shell //可变变量``$name` `= ``'张三疯'``;``$myname` `= ``'name'``;` `echo` `$``$myname``; ``//$myname的值为name name和前边的$符合组合成$name 最终输出上面$name的值为:张三疯 ``` ## 传值 变量间的赋值 变量间的传值分为两种:值传递和引用传递 值传递:将一个变量的值赋值一份,然后赋值给新的变量 传值demo: ```shell //普通传值``$a` `= 1;``//在变量空间开辟一块内存空间存1 存放1之后 会给1分配一个内存地址 假设改内存地址为1001 此时$a指向的内存地址为1001` `$b` `= ``$a``; ``//将$a的内存地址得到,复制出来一份 假设新地址还是1001 此时变量$b指向的内存地址是新复制出来的1001` `unset(``$a``); ``//删除$a之后 只是把一开始$a指向的1001的地址给删掉,$b指向的新的内存地址1001并不受任何影响` `echo` `$b``; ``//所以这里会输出:1 ``` 值传递特点:一个变量的变更不会影响另外一个变量的变更,因为每一个变量指向的内存地址是不一样的,注意:每一个内存地址都指向的值是不同的。 引用传递:将一个变量的地址赋值给新的变量 在给变量赋值的时候,使用地址符号&获得一个变量的地址。 引用传值demo ```shell //传地址``$str` `= 10; `` //内存空间开辟一块内存存放10 随机给10分配了一块内存地址 假设改地址为:10086 $str指向10086这个地址` `$str2` `= &``$str``; `` //$str2的值是引用了$str的内存地址,也就是说 $str2也是指向了$str的内存地址 即10086 此时$str和$str2指向同一个内存地址` `$str2` `= 110;`` //$str2指向的内存地址对应的值改为110之后,所以$str的值也会变成110,因为$str和$str2是指向的同一个内存地址,也就是说更改了其中任何一个变量的值 那么另外的变量的值也会跟着被改变` `echo` `$str``;`` //所以这里输出:110 ```
  • [问题求助] 【SDK for PHP】composer 安装报错
    composer require obs/esdk-obs-php Using version ^3.21 for obs/esdk-obs-php ./composer.json has been updated Running composer update obs/esdk-obs-php Loading composer repositories with package information Updating dependencies Your requirements could not be resolved to an installable set of packages. Problem 1 - Root composer.json requires obs/esdk-obs-php ^3.21 -> satisfiable by obs/esdk-obs-php[3.21.6]. - obs/esdk-obs-php 3.21.6 requires guzzlehttp/guzzle 6.3.0 -> found guzzlehttp/guzzle[6.3.0] but it conflicts with your root composer.json require (^7.0.1). Use the option --with-all-dependencies (-W) to allow upgrades, downgrades and removals for packages currently locked to specific versions. Installation failed, reverting ./composer.json and ./composer.lock to their original content.这个问题存在好久了,好多新项目中使用不了SDK,麻烦尽快升级下 guzzlehttp/guzzle 版本吧!
  • [问题求助] 鲲鹏服务器安装PHP5.4时无法加载ZendGuardLoader
    【功能模块】【操作步骤&问题现象】安装PHP5.4,安装对应ZendGuardLoader后,PHP找不到ZendGuardLoader路径;更换PHP5.5版本,依然如此。【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] PHP依赖包
    用:composer require huaweicloud/huaweicloud-sdk-php:3.0.41-rc时报如下错误./composer.json has been createdRunning composer update huaweicloud/huaweicloud-sdk-phpLoading composer repositories with package informationUpdating dependenciesYour requirements could not be resolved to an installable set of packages.  Problem 1    - Root composer.json requires huaweicloud/huaweicloud-sdk-php 3.0.41-rc, found huaweicloud/huaweicloud-sdk-php[dev-master, 3.0.1-beta, ..., 3.0.39-rc] but it does not match the constraint.Installation failed, deleting ./composer.json.
  • [问题求助] 电脑win10下载PHP依赖包不成功
    【功能模块】【操作步骤&问题现象】1、电脑win10下载PHP依赖包不成功2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] 【welink】【回调】能否提供php版本的回调加密、解密算法啊
    【功能模块】welink回调【操作步骤&问题现象】1、回调的加密和解密算法说明太简单了,看不懂具体步骤和具体参数,能否提供详细说明,或者提供php版本的算法代码示例如果能直接提供完整的sdk则是更加美好的事情