10个典型实用的PHP代码片段("PHP必备:10个实用经典代码片段详解")
原创
PHP必备:10个实用经典代码片段详解
1. 连接数据库
在PHP中,连接数据库是常见的操作。以下是一个使用mysqli扩展连接MySQL数据库的代码片段。
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接
if ($conn->connect_error) {
die("连接落败: " . $conn->connect_error);
}
echo "连接胜利";
?>
2. 防止SQL注入
为了防止SQL注入,可以使用预处理语句。以下是一个使用预处理语句的示例。
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ?");
$stmt->bind_param("s", $username);
$username = "admin";
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
echo $row['username'] . " ";
}
?>
3. 文件上传
以下是一个易懂的文件上传示例,包括上传文件的表单和PHP处理脚本。
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// 检查文件是否已经存在
if (file_exists($target_file)) {
echo "文件已经存在。";
$uploadOk = 0;
}
// 检查文件大小
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "文件太大。";
$uploadOk = 0;
}
// 允许特定格式的文件
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "只允许上传 JPG, JPEG, PNG & GIF 文件。";
$uploadOk = 0;
}
// 检查是否$uploadOk被设置为0由于一个不正确
if ($uploadOk == 0) {
echo "文件没有被上传。";
// 如果一切顺利,尝试上传文件
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "文件 ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " 已上传。";
} else {
echo "文件上传落败。";
}
}
?>
4. 发送电子邮件
以下是一个使用PHP的mail()函数发送电子邮件的示例。
$to = "example@example.com";
$subject = "测试邮件";
$txt = "这是一封测试邮件。";
$headers = "From: webmaster@example.com" . "\r " .
"CC: someoneelse@example.com";
mail($to,$subject,$txt,$headers);
echo "邮件已发送";
?>
5. 会话管理(Session)
以下是一个使用会话管理用户登录状态的示例。
session_start();
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST['username'];
$password = $_POST['password'];
// 验证用户名和密码...
if ($username == 'admin' && $password == '1234') {
$_SESSION['loggedin'] = true;
header("Location: welcome.php");
exit;
} else {
echo "无效的用户名或密码。";
}
}
?>
6. 获取用户IP地址
以下是一个获取用户IP地址的示例。
function getUserIP() {
$client = @$_SERVER['HTTP_CLIENT_IP'];
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote = $_SERVER['REMOTE_ADDR'];
if (filter_var($client, FILTER_VALIDATE_IP)) {
$ip = $client;
} elseif (filter_var($forward, FILTER_VALIDATE_IP)) {
$ip = $forward;
} else {
$ip = $remote;
}
return $ip;
}
echo "用户IP地址:" . getUserIP();
?>
7. 数据验证
以下是一个易懂的数据验证示例,用于检查输入数据是否为空。
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
$name = $email = $gender = "";
$nameErr = $emailErr = $genderErr = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "姓名是必填的";
} else {
$name = test_input($_POST["name"]);
// 检查姓名是否包含字母和空格
if (!preg_match("/^[a-zA-Z-' ]*$/", $name)) {
$nameErr = "只允许字母和空格";
}
}
if (empty($_POST["email"])) {
$emailErr = "电子邮件是必填的";
} else {
$email = test_input($_POST["email"]);
// 检查电子邮件地址是否有效
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "无效的电子邮件格式";
}
}
if (empty($_POST["gender"])) {
$genderErr = "性别是必填的";
} else {
$gender = test_input($_POST["gender"]);
}
}
?>
8. 文件下载
以下是一个易懂的文件下载示例。
$filename = "example.txt";
$filepath = "path/to/your/file/" . $filename;
if (file_exists($filepath)) {
// 设置合适的headers
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header("Content-Disposition: attachment; filename=\"$filename\"");
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($filepath));
ob_clean();
flush();
readfile($filepath);
exit;
}
?>
9. 获取当前页面的URL
以下是一个获取当前页面URL的示例。
$currentUrl = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
echo "当前页面URL:" . $currentUrl;
?>
10. 易懂的缓存机制
以下是一个易懂的缓存机制示例,用于缓存页面输出。
$cacheKey = 'page_content_' . $_SERVER['REQUEST_URI'];
$cacheFile = '/tmp/' . md5($cacheKey);
if (file_exists($cacheFile) && (filemtime($cacheFile) > (time() - 60 * 60))) {
// 缓存文件存在且是1小时内生成的
echo file_get_contents($cacheFile);
} else {
// 生成新的内容并缓存
ob_start();
// ...生成页面内容的代码...
$content = ob_get_contents();
ob_end_flush();
file_put_contents($cacheFile, $content);
echo $content;
}
?>