十天学会PHP/第七天:文件上传、Cookies

来自站长百科
跳转至: 导航、​ 搜索

十天学会PHP

打开文件fopen()[ ]

  • fopen()函数用于在 PHP 中打开文件。
  • 此函数的第一个参数含有要打开的文件的名称,第二个参数规定了使用哪种模式来打开文件:
<html>
<body>

<?php
$file=fopen("welcome.txt","r");
?>

</body>
</html>

文件可能通过下列模式来打开:

  • r 只读。在文件的开头开始。
  • r+ 读/写。在文件的开头开始。
  • w 只写。打开并清空文件的内容;如果文件不存在,则创建新文件。
  • w+ 读/写。打开并清空文件的内容;如果文件不存在,则创建新文件。
  • a 追加。打开并向文件文件的末端进行写操作,如果文件不存在,则创建新文件。
  • a+ 读/追加。通过向文件末端写内容,来保持文件内容。
  • x 只写。创建新文件。如果文件已存在,则返回 FALSE。
  • x+ 读/写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。
  • 注释:如果 fopen() 无法打开指定文件,则返回 0(false)。
  • 例子
  • 如果 fopen() 不能打开指定的文件,下面的例子会生成一段消息:
<html>
<body>

<?php
$file=fopen("welcome.txt","r") or exit("Unable to open file!");
?>

</body>
</html>

关闭文件

  • fclose() 函数用于关闭打开的文件。

<?php $file = fopen("test.txt","r");

//some code to be executed

fclose($file); ?>

  • 检测 End-of-file
  • feof() 函数检测是否已达到文件的末端 (EOF)。
  • 在循环遍历未知长度的数据时,feof() 函数很有用。
  • 注释:在 w 、a 以及 x 模式,您无法读取打开的文件!
if (feof($file)) echo "End of file";
  • 逐行读取文件

f*gets() 函数用于从文件中逐行读取文件。

  • 注释:在调用该函数之后,文件指针会移动到下一行。
  • 例子
  • 下面的例子逐行读取文件,直到文件末端为止:
<?php
$file = fopen("welcome.txt", "r") or exit("Unable to open file!");
//Output a line of the file until the end is reached
while(!feof($file))
  {
  echo fgets($file). "<br />";
  }
fclose($file);
?>
  • 逐字符读取文件
  • fgetc() 函数用于从文件逐字符地读取文件。
  • 注释:在调用该函数之后,文件指针会移动到下一个字符。
  • 例子
  • 下面的例子逐字符地读取文件,直到文件末端为止:
<?php
$file=fopen("welcome.txt","r") or exit("Unable to open file!");
while (!feof($file)) 
  { 
  echo fgetc($file); 
  }
fclose($file);
?>

创建一个文件上传表单[ ]

  • 允许用户从表单上传文件是非常有用的。
  • 请看下面这个供上传文件的 HTML 表单:
<html>
<body>

<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" /> 
<br />
<input type="submit" name="submit" value="Submit" />
</form>

</body>
</html>
  • 请留意如下有关此表单的信息:
  • <form> 标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用 "multipart/form-data"。
  • <input> 标签的 type="file" 属性规定了应该把输入作为文件来处理。举例来说,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮。
  • 注释:允许用户上传文件是一个巨大的安全风险。请仅仅允许可信的用户执行文件上传操作。

创建上传脚本[ ]

  • "upload_file.php" 文件含有供上传文件的代码:
<?php
if ($_FILES["file"]["error"] > 0)
  {
  echo "Error: " . $_FILES["file"]["error"] . "<br />";
  }
else
  {
  echo "Upload: " . $_FILES["file"]["name"] . "<br />";
  echo "Type: " . $_FILES["file"]["type"] . "<br />";
  echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
  echo "Stored in: " . $_FILES["file"]["tmp_name"];
  }
?>
  • 通过使用 PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件。
  • 第一个参数是表单的 input name,第二个下标可以是 "name", "type", "size", "tmp_name" 或 "error"。就像这样:
$_FILES["file"]["name"] - 被上传文件的名称 
$_FILES["file"]["type"] - 被上传文件的类型 
$_FILES["file"]["size"] - 被上传文件的大小,以字节计 
$_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称 
$_FILES["file"]["error"] - 由文件上传导致的错误代码 
  • 这是一种非常简单文件上传方式。基于安全方面的考虑,您应当增加有关什么用户有权上传文件的限制。

上传限制[ ]

  • 在这个脚本中,我们增加了对文件上传的限制。用户只能上传 .gif 或 .jpeg 文件,文件大小必须小于 20 kb:
<?php

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Error: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Stored in: " . $_FILES["file"]["tmp_name"];
    }
  }
else
  {
  echo "Invalid file";
  }

?>
  • 注释:对于 IE,识别 jpg 文件的类型必须是 pjpeg,对于FireFox,必须是 jpeg。

保存被上传的文件[ ]

  • 上面的例子在服务器的 PHP 临时文件夹创建了一个被上传文件的临时副本。
  • 这个临时的复制文件会在脚本结束时消失。要保存被上传的文件,我们需要把它拷贝到另外的位置:
<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";

    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>

什么是 Cookie?[ ]

  • cookie 常用于识别用户。cookie 是服务器留在用户计算机中的小文件。每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。
  • 如何创建 cookie?
  • setcookie() 函数用于设置 cookie。
  • 注释:setcookie() 函数必须位于 <html> 标签之前。
  • 语法
setcookie(name, value, expire, path, domain);
  • 例子
  • 在下面的例子中,我们将创建名为 "user" 的 cookie,把为它赋值 "Alex Porter"。我们也规定了此 cookie 在一小时后过期:
<?php 
setcookie("user", "Alex Porter", time()+3600);
?>

<html>
<body>

</body>
</html>
  • 注释:在发送 cookie 时,cookie 的值会自动进行 URL 编码,在取回时进行自动解码(为防止 URL 编码,请使用 setrawcookie() 取而代之)。

如何取回 Cookie 的值?[ ]

  • PHP 的 $_COOKIE 变量用于取回 cookie 的值。
  • 在下面的例子中,我们取回了名为 "user" 的 cookie 的值,并把它显示在了页面上:
<?php
// Print a cookie
echo $_COOKIE["user"];

// A way to view all cookies
print_r($_COOKIE);
?>
  • 在下面的例子中,我们使用 isset() 函数来确认是否已设置了 cookie:
<html>
<body>

<?php
if (isset($_COOKIE["user"]))
  echo "Welcome " . $_COOKIE["user"] . "!<br />";
else
  echo "Welcome guest!<br />";
?>

</body>
</html>

如何删除 cookie?[ ]

  • 当删除 cookie 时,您应当使过期日期变更为过去的时间点。
  • 删除的例子:
<?php 
// set the expiration date to one hour ago
setcookie("user", "", time()-3600);
?>
<pre>
===如果浏览器不支持 cookie 该怎么办?===
*如果您的应用[[程序]]涉及不支持 cookie 的[[浏览器]],您就不得不采取其他方法在应用程序中从一张页面向另一张页面传递信息。一种方式是从表单传递数据(有关表单和用户输入的内容,稍早前我们已经在本教程中介绍过了)。
*下面的表单在用户单击提交按钮时向 "welcome.php" 提交了用户输入:
<pre>
<html>
<body>

<form action="welcome.php" method="post">
Name: <input type="text" name="name" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>

</body>
</html>取回 "welcome.php" 中的值,就像这样:

<html>
<body>

Welcome <?php echo $_POST["name"]; ?>.<br />
You are <?php echo $_POST["age"]; ?> years old.

</body>
</html>

参考来源[ ]

使用手册导航

十天学会php

第一天:PHP基础教程|第二天:PHP基础语法|第三天:运算符、循环与数组|第四天:数组、函数、表单|第五天:$_GET、$_POST |第六天:PHP日期、引用|第七天:文件上传、Cookies|第八天:Sessions、发送电子邮件|第九天:错误处理、异常处理、过滤器|第十天:PHP学习必看