设为首页 加入收藏

TOP

从改一个老项目开始的PHP踩坑记(一)
2023-07-23 13:28:20 】 浏览:166
Tags:从改一 项目开 PHP

php所有版本的地址: https://windows.php.net/downloads/releases/archives/

访问控制器时省略了index.php报No input file specified.

解决:public/.htaccess下文件改为(RewriteRule行):

<IfModule mod_rewrite.c>
  Options +FollowSymlinks -Multiviews
  RewriteEngine On

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php?s=$1 [QSA,PT,L]
</IfModule>

Apache开启路由重写(一般默认开启了):
httpd.conf中mod_rewrite.so注释去掉。

阿里文件上传跨域

错误信息:

Access to XMLHttpRequest at 'http://xxxx.oss-cn-hangzhou.aliyuncs.com/file?uploads=' from origin 'http://localhost' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

require_once(): Failed opening required '../a.php' (include_path='.;C:\php\pear')

通过百度尝试以下,都没用:
1.可能由于你没有传完整php程序,或者php程序中的某个文件损坏,可能会报这个错误。去官网重新下载文件,是虚拟空间的请用官网支持的FTP工具上传php程序。
2.文件权限问题,可能文件或者文件夹权限设置错误引起的。
3.文件夹名含有中文,有时候中文文件夹名也可能引起这个错误,建议改成英文的。
4.修改php程序,这个方法我不推荐(因为有的php程序可能需要改很多很多)
5.修改php.ini配置文件。

通过测试,其在相同路径或者子路径是能生效的,也就是说它不识别../跳到上一个路径,那就直接使用路径常量定位到项目根路径,进行拼接,如:

require_once THINK_PATH.'\Library\Vendor\aliyunOss\autoload.php';

Can't use method return value in write context

错误位置
FILE: xxx\WWW\app\ThinkPHP\Library\Vendor\aliyunOss\src\OSS\OssClient.php  LINE: 3384

这里是使用了阿里云OSS的phpsdk,目前的版本是(2.6.0 时间是:20221022),其文档上说支持PHP 5.3以上版本。
image
但很可惜那都是骗人的,然后换底版本的sdk(v2.2.4)。这个错就消失了。

Exception' with message '"xxxx.oss-cn-beijing.aliyuncs.com"bucket name is invalid' in

这是阿里云OSS的一个报错,这说明连上了呀。
这个是bucket名称错了,其值应该是这里的,(而不是像这种的xxx.oss-cn-beijing.aliyuncs.com):
image

关于文件上传

在php.ini中需要配置文件上传的最大值等,否则上传文件超出大小时$_FILES为空

;post的最大值 默认的post_max_size 为2M
post_max_size=1024M
;PHP页面运行的最大时间值,默认30秒
max_execution_time=300
;上传的最大值 默认为8M post_max_size 大于 upload_max_filesize 为佳
upload_max_filesize=1024M
;是否允许通过HTTP上传文件的开关。默认为ON即是开
file_uploads = on
;文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹
upload_tmp_dir
;每个PHP页面接收数据所需的最大时间,默认60秒
max_input_time = 600
;每个PHP页面所吃掉的最大内存,默认8M
memory_limit = 8m

注:部署在Linux中的时候,要上传到的文件夹必须要有相关的权限。不然你在windows环境,啥都正常也传不上的。

ThinkPHP 验证码不显示

  1. 检查PHP是否已经安装GD库支持;将extension=php_gd2.dll的注释放开。
  2. 如果是中文验证码检查是否有拷贝字体文件到类库所在目录;

ThinkPHP 验证码总是不正确 后台不能登入

使用new \Think\Verify();生成验证码会在session中保存验证码的值,但是若session的路径设置有问题,或者是没设置会导致其无法保存,进而一直都是空的导致出错。

;配置session路径
session.save_path="D:\phpStudy\tmp\tmp"

当你配置了它发现还是不行的话,然后你切个低版本的它又行了,可能是当前项目目录下有类型user.ini也配置了session.save_path的值。你可以使用phpinfo();看下是不是有个local的量。

Undefined class constant 'MYSQL_ATTR_INIT_COMMAND'

改错误一般为pdo_mysql拓展未开启,在php.ini中将extension=pdo_mysql的注释放开即可。
还不行,则可在phpinfo中检测拓展的目录是否设置正确,和改目录下是否有该拓展。

STORAGE_WRITE_ERROR:./../cache/Cache/Home/e1abadd62c4e87a9a75c0e547ca055ed.php

cache文件夹没有写入的权限,导致缓存无法写入。此问题很容易在使用widnows开发,然后部署到linux中时,有不少问题就是权限没给导致的。

解决:权限设置成777或者nginx(apache)所在的组和用户。

Fatal error: Uncaught Error: Call to undefined function Think\C() in Library\Think\Think....

可以在app\ThinkPHP\Library\Think\Think.class.php直接看TP的源码:
start方法中有:

点击查看代码
/**
     * 应用程序初始化
     * @access public
     * @return void
     */
    static public function start() {
      ......

      // 这里可以看到 它取了~runtime.php文件
      $runtimefile  = RUNTIME_PATH.APP_MODE.'~runtime.php';
      i
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇浅谈PHP设计模式的工厂模式 下一篇在Mac M1 Pro 芯片上安装PHP扩展..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目