php文件 防链 代码暂存

本文介绍了PHP中的错误处理和异常处理机制,包括错误检测、自定义错误处理函数、异常抛出与捕获等核心概念。通过实例展示了如何有效管理运行时错误及异常,确保程序稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

$fp=fopen("aaa.txt","r");


<?php


//$fp=fopen("aaa.txt","r");
//echo "ok";
//1.判断文件是否存在.
//2. 绝对路径和相对路径
/*if(!file_exists("aaa.txt")){
echo "文件不存在!";
exit();
}else{
$fp=fopen("aaa.txt","r");
echo "文件打开成功";
//....关闭
fclose($fp);
}*/
//使用die处理


/* if(!file_exists("aaa.txt")){
die("文件不存在");
}else{
//打开文件操作
}
echo "ok";*/


file_exists("aaa.txt") or die("文件不存在!!!");


echo "ok";




?>
--------------------------------------
<?php


//自定义错误函数
function  my_error3($errno,$errmes){
$err_info="错误号是:".$errno."--".$errmes;
echo $err_info;
//把这个错误信息保存
//\r\n 表示向文件输入一个回车换行
//<br/> 表示向网页输出一个回车换行
date_default_timezone_set("Asia/Chongqing");

error_log("时间是".date("Y-m-d G-i-s")."-".$err_info."\r\n",3,"d:/myerr.txt");
}


function my_error4($errno,$errmes){
echo "出大事了".$errno;
exit();
}


//指定E_USER_WARNING 错误级别的函数

//set_error_handler("my_error4",E_USER_ERROR);
set_error_handler("my_error3",E_USER_WARNING);



$age=700;
if($age>120){
//调用触发器,时候同时指定错误级别.
trigger_error("输入年龄过大1",E_USER_WARNING);
//exit();
}


echo "ok";


?>
---------------------------------------
<?php


/* function A(){

//调用方法
//添加用户
//我需要这样做,addUser和updateUser都成功,才算成功
$res1=addUser("shunping");


//修改用户
$res2=updateUser("xiaoming");

//删除用户
//deleteUser();...


if($res1 && $res2 ){
echo "真的成功!";
}else{
echo "失败";
}
}


//添加用法
function addUser($username){

if($username=="shunping"){
//添加成功
return true;
}else{
//失败
return false;
}
}


//修改用户
function updateUser($username){
if($username=="xiaoming"){
//修改成功
return true;
}else{
return false;
}
}


A();*/


//我们使用异常机制


try{
echo "<br/>11111111111111111111";
addUser("shunping");
echo "<br/>222222222222222222222";
updateUser("xxx");
echo "<br/>3333333333333333";
}
//catch 捕获  Exception 是异常类(是php定义好一个类)
catch(Exception $e){
echo "失败信息 =".$e->getMessage();
}


function addUser($username){

if($username=="shunping"){
//添加ok
}else{
//添加error
//抛出异常,可以这样成返回了一个异常
throw new Exception("添加失败");
}
}


function updateUser($username){
if($username=="xiaoming"){
//正常修改
}else{
throw new Exception("修改失败");
}
}


?>
-----------------------------------------------
<?php



function checkNum($val){

if($val>100){
throw new Exception("err_no1: 这个数据过大");
}else{
echo "输入的值是正常";
}


}


try{
checkNum(300);


}catch(Exception $e){

echo $e->getMessage()."--".$e->getLine();

}






?>
----------------------------------------
<?php




//定义一个顶级异常处理器
function my_exception($e){
echo "我是顶级异常处理".$e->getMessage();
}
//修改默认的顶级异常处理函数(器)
set_exception_handler("my_exception");


function a1($val){


if($val>100){
throw new Exception ("val>100");
}
}


function a2($val){

if($val=="hello"){
throw new Exception ("不要输入hello");
}
}


try{
a2("hello");
}catch(Exception $e){
//获取.
//echo $e->getMesage();
//可以继续抛出,这时将会启动php默认的异常处理器来处理
//你可以自己定义一个顶级异常处理.
throw $e;
}







?>
-----------------------------------------


<?php




//定义了一个异常
class MyException1 extends Exception{




}


class MyException2 extends Exception{


}


function A(){


throw new MyException1("a");
}


function B(){
throw new MyException2("b")
}


function C(){


try{
A();//抛出MyException1
B();//抛出MyException2
}catch(Exception1 $e1){
$e1->getMessage();
}catch(Exception2 $e2){
$e2->getMesage();
}
}




?>
----------------------------------------------
<?php


try{
    
// $i=8/0;
$fp=fopen("aaa.txt","r");

}catch(Exception $e){
echo "ok";
echo $e->getMessage();
}


?>
---------------------------
<?php


echo time();


//输出当前日期 实际
//默认时期是UTC ,我们中国8
//设置 1. 页面设置 2. 在php.ini设置
date_default_timezone_set("Asia/Chongqing");
//格式
echo date("Y-m-d G-i-s");


?>
---------------------------------------------




<?php


//print_r($_SERVER);
//foreach($_SERVER as $key=>$val){
// echo "$key=$val <br/>";
//}
//可以指定取出访问该页面的ip
//echo "朋友你的ip是:".$_SERVER['REMOTE_ADDR'];


if($_SERVER['REMOTE_ADDR']=="192.168.1.100"){
//跳转到一个警告页面
header("Location: err.php");
}
?>
-------------
<?php


//没有防止.
//获取REFERER

if(isset($_SERVER['HTTP_REFERER'])){
//取出来
//判断 $_SERVER['HTTP_REFERER'] 是不是以 http://localhost/http 开始->函数
if(strpos($_SERVER['HTTP_REFERER'],"http://localhost/http")==0){
echo "韩顺平的账号信息..";
}else{
//跳转到警告页面
header("Location: warning.php");
}
}else{
//跳转到警告页面
header("Location: warning.php");
}




?>

时间:
Y 代表4位年  G 24小时格式 g12小时格式
y代表2位年    H 24小时格式 h12小时格式   


 小写是有前导0的,大写没有前导0
echo date("y-m-d")

 错误处理  异常处理
错误处理时一个重要的部分,如果缺少错误检测代码,那么程序
看上去很不专业,也为安全风险打开了大门


 文件处理:
  其中c++对文件处理更加的复杂
  文件是很古老很复杂的东西
  file中  file_exists 检文件或目录是否存在
 \\  或者/都可以
 相对路径  绝对路径
 错误处理方式:
    简单的die()语句
    自定义错误和错误触发器
    错误日志
    fclose($fp);
  die("文件不存在"); 如果文件是图片,则先显示在销毁
   简单的die()语句
    file_exists("aa.txt") or  die("文件不存在");
 创建自定义错误函数(处理器)--介绍
 该函数必须有能力处理至少2个参数(error level ,error message)
 error_function(error_level,......)
默认处理错误方式 php中    .........
------------------------------------------
改变系统默认的构造函数
----------------
错误触发器:错误处理器 区别
触发器往往是处理逻辑错误
处理器是处理系统错误
调用触发器
  trigger_error("输入年龄大")
--------------
时间:
Y 代表4位年  G 24小时格式 g12小时格式
y代表2位年    H 24小时格式 h12小时格式   


 小写是有前导0的,大写没有前导0
echo date("y-m-d")


  异常


   异常处理用于在指定的错误 异常情况发生时改变脚本
 的正常流程,这种情况成为异常。
   如果异常被抛出时,其后的代码不会继续执行,php会
 尝试查找匹配的catch代码块
   如果异常没有被捕获,而且又没有使用 set_exception_handler()
   作相应的处理,那么将是一个致命的错误,并且输出
“Uncaught Exception” (未捕获异常)的错误信息。


 try{
 } catch(Exception e){
 //捕获异常并处理,通常情况下抛出一个异常
 //1.自己处理
 //2.自己不处理,将其抛出
 throw e;
 }
 
  php中处理异常
  1.基本语法
  2.


  ----------------------------
  $refer=$_SERVER['HTTP_REFERER'];
if($refer==null||strpos($refer,"http://localhost/test")!=0){
//跳转到错误页面;
header('Location: err.php');
}




---------------
基本结构


请求行
消息头
                            <----空行
消息体(实体内容)
举例:

<think>嗯,用户遇到了使用pnpm commit提交失败,并且本地修改的代码被删了的问题。首先,我需要理解pnpm commit通常和什么工具有关。可能用户在使用类似commitizen这样的工具,结合husky和lint-staged来规范提交信息,并在提交前运行一些检查或格式化。当提交失败时,可能是这些钩子或检查没有通过,导致提交中断,而用户可能没有正确处理好修改的代码,导致丢失。 接下来,用户提到本地修改被删了,这可能是因为在提交过程中,某些操作(如自动修复或格式化)可能修改了文件,或者在过程中用户误操作导致。需要确认用户是否使用了版本控制工具如Git,因为如果代码还在暂存区或本地仓库,可能还能恢复。 可能的解决步骤包括:首先检查Git的暂存区或本地历史,使用git status查看状态,看看是否有未提交的修改残留。如果代码被删除但未提交,可能还在工作区,或者可以通过git reflog查找之前的提交记录来恢复。另外,用户可能在运行pnpm commit时触发了pre-commit钩子,导致代码被修改或删除,这时候需要检查钩子的脚本内容,看是否有问题。 还要考虑用户是否可能误用了git reset或git checkout等命令,导致修改丢失。如果用户没有提交过,可能需要从编辑器的本地历史或临时文件中恢复,比如VS Code有本地历史功能。另外,提醒用户以后在类似操作前先提交或备份,避免类似问题发生。 总结下来,步骤大致是:检查Git状态,尝试恢复丢失的修改,检查提交钩子的配置,以及预措施。需要一步步引导用户操作,确保他们能找回丢失的代码并避免再次发生。</think>遇到使用 `pnpm commit` 提交失败导致本地代码丢失的情况,可以通过以下步骤解决: --- ### 1. **优先恢复丢失的代码** - **检查 Git 暂存区** 运行 `git status` 查看是否有未提交的修改残留(可能被标记为 `Changes not staged for commit`)。 - **使用 Git 恢复** 如果代码未被完全清除,尝试: ```bash git restore . # 恢复工作区文件 git stash pop # 如果有暂存的修改 ``` - **利用 IDE 本地历史** 编辑器(如 VS Code、WebStorm)自带本地修改历史记录,可通过右键文件 → `Local History` 找回。 --- ### 2. **分析提交失败原因** - **检查 pre-commit 钩子** `pnpm commit` 通常关联 `husky` 的 Git 钩子,可能触发了代码格式化(如 ESLint、Prettier)或测试,失败时会中断提交。 - **手动绕过钩子测试** 临时跳过钩子提交,验证代码是否正常: ```bash git commit -m "temp" --no-verify ``` --- ### 3. **修复提交流程问题** - **查看报错日志** 提交失败时终端会打印具体错误(如 ESLint 校验失败),根据提示修复代码。 - **更新依赖工具** 可能是 `lint-staged` 或格式化工具配置异常: ```bash pnpm update lint-staged husky commitizen ``` - **检查 `package.json` 配置** 确保 `lint-staged` 规则正确: ```json { "lint-staged": { "*.{js,ts}": ["eslint --fix", "prettier --write"] } } ``` --- ### 4. **预措施** - **提交前手动备份** 关键代码修改后先手动提交或备份到独立分支。 - **分阶段提交** 使用 `git add -p` 选择性暂存修改,避免一次性提交全部变更。 - **禁用自动修复(谨慎)** 临时修改 `lint-staged` 配置,移除 `--fix` 参数: ```json "*.js": ["eslint"] # 仅检查不自动修复 ``` --- ### 附:典型问题场景 | 现象 | 原因 | 解决方案 | |---------------------|-----------------------|------------------------------| | ESLint 校验失败 | 代码格式不符合规范 | 按提示修复或调整 ESLint 规则 | | Prettier 自动格式化冲突 | 格式化后代码被意外修改 | 提交前手动运行 `prettier --write` | | 单元测试未通过 | 测试用例失败 | 修复测试逻辑或暂时跳过测试 | 如果问题仍未解决,可提供 **终端报错日志** 和 `package.json` 配置片段进一步分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值