記錄一個老PHP項目中遇到的還能記得的坑,後面要是還有興趣研究研究PHP的話,或者又有哪些坑,就都記一記,有些東西真的是不去整就不知道,改起來雖然不難,但是找起來卻不容易啊。┗|`O′|┛ 嗷~~ ...
訪問控制器時省略了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以上版本。
但很可惜那都是騙人的,然後換底版本的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):
關於文件上傳
在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
ThinkPHP 驗證碼總是不正確 後臺不能登入
使用new \Think\Verify();
生成驗證碼會在session
中保存驗證碼的值,但是若session的路徑設置有問題,或者是沒設置會導致其無法保存,進而一直都是空的導致出錯。
;配置session路徑
session.save_path="D:\phpStudy\tmp\tmp"
當你配置了它發現還是不行的話,然後你切個低版本的它又行了,可能是當前項目目錄下有類型user.ini
也配置了session.save_path的值。你可以使用phpinfo();
看下是不是有個local
的量。