PHP-如何使用这样的页面复制文件?

PHP-如何使用这样的页面复制文件?,php,Php,我正在尝试修复复制函数未运行的问题。这是我的代码: <?php if( $_FILES['file']['name'] != "" ) { copy( $_FILES['file']['name'], "php5/image" ) or die( "Could not copy file!"); } else { die("No file specified!"); } ?> <html> <head> <title>Uplo

我正在尝试修复复制函数未运行的问题。这是我的代码:

<?php
if( $_FILES['file']['name'] != "" ) {

    copy( $_FILES['file']['name'], "php5/image" ) or die( "Could not copy file!");

} else {
    die("No file specified!");
}
?>

<html>
<head>
<title>Uploading Complete</title>
</head>
<body>
<h2>Uploaded File Info:</h2>
<ul>
<li>Sent file: <?php echo $_FILES['file']['name']; ?>
<li>File size: <?php echo $_FILES['file']['size']; ?> bytes
<li>File type: <?php echo $_FILES['file']['type']; ?>
</ul>
</body>
</html>

上传完成
上载的文件信息:
  • 已发送文件:
  • 文件大小:字节
  • 文件类型:
为什么它不起作用?如何修复它

我要走了

警告:复制(feel_like_doraemon.jpg):无法打开流:没有这样的文件或目录


因为
['name']
是文件名,而不是上传后的文件路径,而不是
['name']
尝试使用
['tmp_name']

copy( $_FILES['file']['tmp_name'], "php5/image" ) or die( "Could not copy file!");

这是因为上传的文件不是使用原始名称存储在服务器上的,而是在
tmp\u name
索引中提供了一个临时文件名。此外,为了安全起见,您应该使用而不是
copy


您的目标路径也需要存在。

根据您的代码,您必须使用移动上传文件功能,而不是复制

Do as mentioned below.
<?php
if( $_FILES['file']['name'] != "" ) {

    $tmp_name = $_FILES["file"]["tmp_name"];
    $name = basename($_FILES["file"]["name"]);
    move_uploaded_file($tmp_name, "php5/image/".$name)or die( "Could not copy file!");
    //copy( $_FILES['file']['name'], "php5/image" ) or die( "Could not copy file!");

} else {

    die("No file specified!");

}
?>
按以下所述操作。

上传文件时,应使用
移动上传的文件
将文件实际存储在所选目录中。另外,使用完整路径而不是相对路径对我来说总是更好——更改适用的行以适应您的环境

<?php
if( $_SERVER['REQUEST_METHOD']=='POST' && isset( $_FILES['file'] ) ){
    try{
        $obj=$_FILES['file'];
        $name=$obj['name'];
        $tmp=$obj['tmp_name'];

        $dir=$_SERVER['DOCUMENT_ROOT'] . '/php5/image';
        if( !realpath( $dir ) )throw new Exception( sprintf( 'unable to find target directory %s', $dir ) );

        $target="{$dir}/{$name}";

        if( is_uploaded_file( $tmp ) && move_uploaded_file( $tmp, $target ) ){
            /* OK */
            @unlink( $tmp );
        } else {
            /* error */
        }
    }catch(Exception $e ){
        exit( $e->getMessage() );
    }
}


?>

<html>
    <head>
        <title>Uploading Complete</title>
    </head>
    <body>
        <h2>Uploaded File Info:</h2>
        <ul>
            <li>Sent file: <?php echo $_FILES['file']['name']; ?>
            <li>File size: <?php echo $_FILES['file']['size']; ?> bytes
            <li>File type: <?php echo $_FILES['file']['type']; ?>
        </ul>
    </body>
</html>

上传完成
上载的文件信息:
  • 已发送文件:
  • 文件大小:字节
  • 文件类型:

显示您的上传表单请查看好的,问题已经解决:Drun
打印($\u文件)
,您将在那里看到它。@YohanesAdiP不使用此方法,请使用
移动上传的文件
!此方法不安全,已损坏,并将临时文件留在服务器上。请不要建议用户对目录授予777权限!在告诉人们这个危险的建议之前,先了解文件权限及其工作方式!请参阅:但是您必须使用移动上载文件而不是复制它将解决您的问题。由于您的错误建议,我对您投了反对票,直到您删除它为止。是否
move\u upload\u file
将文件移出,这使您对
取消链接的调用毫无意义?用
@
来抑制错误是不可取的。好东西-您可能应该在保存前添加额外的检查来验证文件的类型和大小,从而使上述内容更具弹性-但很高兴它现在适用于Youn大括号。。。在
取消链接之前使用
@
将禁止任何此类操作error@RamRaider如果系统严重损坏,
move\u uploaded\u file
失败,您将面临更大的问题。对
unlink
的额外调用是完全无用的,会增加开销,并可能隐藏真正的错误