使用PHP获取文件的系统创建日期
编辑 我现在有了这段PHP代码:使用PHP获取文件的系统创建日期,php,file-upload,Php,File Upload,编辑 我现在有了这段PHP代码: $name = isset($_POST['image_file']) ? $_POST['image_file'] : ''; $date_added = date ("F d Y H:i:s.", filectime(basename($_FILES["image_file"]["tmp_name"]))); $path = "../uploads/".basename($_FILES["image_file"
$name = isset($_POST['image_file']) ? $_POST['image_file'] : '';
$date_added = date ("F d Y H:i:s.", filectime(basename($_FILES["image_file"]["tmp_name"])));
$path = "../uploads/".basename($_FILES["image_file"]["name"]);
$patient_id = $_POST['patient_id'];
$remark = $_POST['remark'];
//$date_added = $_POST['date_added'];
$ext = pathinfo($path, PATHINFO_EXTENSION);
...
任何文件(图像除外)的结果为:1970年1月1日01:00:00。
当我试图上传一张图片时,它会将我发送到一个空白页面,在那里不会显示错误,并且图片不会上传到文件夹中
结束编辑
我需要使用以下表单将扫描图像添加到患者文件中:
<form enctype="multipart/form-data" id="myForm" name="myForm" action="add_scan.php" method="post">
<div class="box-body" id="toggleDiv">
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label style="float:left">File Description</label>
<input type="text" class="form-control" id="remark" name="remark"/>
<label style="float:left">Upload File</label>
<input type="file" class="form-control" id="image_file" name="image_file"/>
<input type="hidden" class="form-control" id="patient_id" name="patient_id" value="<?php echo $patient_id ?>"/>
</div><!-- /.form-group -->
<button type="submit" class="btn btn-warning" id="add_scan" name="add_scan">Add File</button>
</form>
我使用这一行的地方:date\u added=date(“Y-m-d”,basename($\u FILES[“image\u file”][“name”])
根据PHP PDO文档访问日期
但是没有添加任何内容,我只看到我的
add_scan.php
代码的一个空白页,它没有重定向到patient.php
页面。filemtime报告文件修改时间,而不是创建时间(这在大多数操作系统上不可用)
这不是PDO文档
上传的文件是原始文件中保存的数据的副本,因此您在副本上看到的时间总是“现在”
用户可以在本地机器上查看修改时间。如果他们无法提供此信息,则唯一的选择是备份文件,在服务器上还原(使用不更改mtime的适当方法,例如将untar作为根目录),然后直接从那里加载文件,而不是通过web上载。filemtime报告文件修改时间,不是它的创建时间(这在大多数操作系统上不可用) 这不是PDO文档 上传的文件是原始文件中保存的数据的副本,因此您在副本上看到的时间总是“现在”
用户可以在本地机器上查看修改时间。如果他们无法提供此信息,则唯一的选择是备份文件,在服务器上还原(使用不更改mtime的适当方法,例如将untar作为根目录),然后直接从那里加载文件,而不是通过web上载。解决方案: 因为您正在上载文件,所以系统上的日期将是上载日期。如果是图像文件,您的解决方案是读取图像文件元数据,这有点麻烦,因为每种类型的图像文件都有多种类型的元数据,而查找所需的元数据本身并不高效 我认为PHP插件可以做到这一点,但我不能保证这个/这些函数的质量或价值 进一步澄清: 将文件从计算机上载到服务器时,服务器将保存有关计算机上文件的文件系统信息 元数据是关于某物的数据,通常关于文件的数据(例如其创建日期)不是作为标准存储在文件本身中,而是存储在存储文件内容的操作系统中 接收您上传的文件的服务器无法告诉您该文件是何时保存到它来自的计算机上的,或者其他与文件系统相关的任何内容,因为服务器只收到了文件内容数据,而没有收到关于存储和修改(等)的文件系统元数据 如果此信息可从文件中获得,则它将存储在文件本身内部的所谓“元数据”中,要获取这些元数据位,您需要使用类似于图像的
Imagick
或者,如果您只是想要文件添加到此系统的日期,您可以读取该日期 注意事项:
- 您需要
filectime
- 在
之后,添加一个标题
以停止执行退出
- 您有一个同名的
和$\u POST
值,您使用的是$\u FILES
和$\u POST['upload\u file']
我不确定这是否会破坏您的脚本,但除非您的表单中有另一个同名的字段,否则该字段的POST值将为空,这显然是一种错误做法李>$\u FILES['upload\u file']
- 您的
和/或require
不需要放在括号内include
- 给
一个相对路径也是不好的做法,您应该尽可能使用pathinfo
或其他神奇的常量给PHP函数绝对路径$\u SERVER['DOCUMENT\u ROOT']
- 在
中删除filectime
,这是不需要的basename
- 使用
移动上传的文件时,
实际上应该是$path.$name
$path.$name.$ext
您的问题(来自您的评论)是您正在查找不是文件的字符串的时间。将
filectime
调用中的$\u文件[“image\u file”][“name”]
替换为['tmp\u name']
,因为这是上载文件(临时)存储的位置地址
$\u FILES
中的名称
数组值只会告诉您从上传位置上传的文件的名称
但是这次只会告诉你上传的时间
- 错误日志应该显示您的
正在绑定以从非文件实体获取数据李>filectime
- 解决方案:
因为您正在上载文件,所以系统上的日期将是上载日期。如果是图像文件,您的解决方案是读取图像文件元数据,这有点麻烦,因为每种类型的图像文件都有多种类型的元数据,而查找所需的元数据本身并不高效
我认为PHP插件可以做到这一点,但我不能保证这个/这些函数的质量或价值
进一步澄清:
将文件从计算机上载到服务器时,服务器将保存有关计算机上文件的文件系统信息
<?php error_reporting(E_ALL); ini_set("display_errors", 1); require_once('../include/global.php'); //session_start(); $user = $_SESSION['username']; $id_logged = $_SESSION['login_id']; if(isset($_POST['add_scan'])) { try { $name = isset($_POST['image_file']) ? $_POST['image_file'] : ''; $path = "../uploads/".basename($_FILES["image_file"]["name"]); $date_added = date ("Y-m-d", filectime(basename($_FILES["image_file"]["name"]))); $patient_id = $_POST['patient_id']; $remark = $_POST['remark']; //$date_added = $_POST['date_added']; $ext = pathinfo($path, PATHINFO_EXTENSION); move_uploaded_file($_FILES["image_file"]["tmp_name"], $path.$name); $sqlUpd = "INSERT INTO scan_image(id_logged, patient_id, image_file, remark, date_added) VALUES(:id_logged, :patient_id, :image_file, :remark, :date_added)"; $stmt = $conn->prepare($sqlUpd); $stmt->bindValue(':id_logged', $id_logged); $stmt->bindValue(':patient_id', $patient_id); $stmt->bindValue(':image_file', $path); $stmt->bindValue(':remark', $remark); $stmt->bindValue(':date_added', $date_added); $stmt->execute(); header("Location: patients.php?patient=".$patient_id); } catch(PDOException $e) { echo $e->getMessage(); } ?>