목차
PHP上传文件时无法上传成功,$_FILES['screenshot']['tmp_name']为空
Guitar Wars - Add Your High Score
范例
php教程 php手册 PHP上传文件时无法上传成功,$_FILES['screenshot']['tmp_name']为空

PHP上传文件时无法上传成功,$_FILES['screenshot']['tmp_name']为空

Jun 13, 2016 am 09:28 AM
문서

PHP上传文件时无法上传成功,$_FILES['screenshot']['tmp_name']为空

最近在学习《HeadFirst PHP & MySQL》一书的第5章“使用存储在文件中的数据”,做一个文件上传的应用时,出现了错误,就是文件无法成功上传。这个问题困扰了我很久,不过还好最后终于解决了。原因是我上传的图片文件大小超过了HTML 表单中 MAX_FILE_SIZE 选项指定的值32768Bytes即32KB导致无法上传成功。

我使用了XAMPP(Apache + MySQL + PHP + Perl)集成开发包和Zend Studio 10.6作为PHP IDE开发环境,另外关于PHP调试我采用了XDebug,在Zend Studio10.6中配置我参考了博文Zend Studio 10.5 与 XDebug 调试| Zend Debugger 说明 Drupal 源代码 (一)

我的addscore.php的PHP代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Guitar Wars - Add Your High Score</title>
  <link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
  <h2 id="Guitar-Wars-Add-Your-High-Score">Guitar Wars - Add Your High Score</h2>

<?php
  require_once &#39;appvars.php&#39;;
  require_once &#39;connectvars.php&#39;;
		
  if (isset($_POST[&#39;submit&#39;])) {
    // Grab the score data from the POST
    $name = $_POST[&#39;name&#39;];
    $score = $_POST[&#39;score&#39;];
    $screenshot = $_FILES[&#39;screenshot&#39;][&#39;name&#39;];
    
//     echo "name: $name <br />";
//     echo "score: $score <br />";
//     echo "screenShot: $screenshot <br />";

    if (!empty($name) && !empty($score) && !empty($screenshot)) {
      // Move the file to the target upload folder
      $target = GW_UPLOADPATH . $screenshot;
      echo json_encode($_FILES);
      
      if (move_uploaded_file($_FILES[&#39;screenshot&#39;][&#39;tmp_name&#39;], $target)) { 
      	// Connect to the database
		$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) 
		    or die(&#39;Error Connecting to MySQL Database!&#39;);

		// Write the data to the database
		$query = "INSERT INTO guitarwars VALUES (0, NOW(), &#39;$name&#39;, &#39;$score&#39;,&#39;$screenshot&#39;)";
		mysqli_query($dbc, $query) or die(&#39;Error querying database;&#39;);

		// Confirm success with the user
		echo &#39;<p>Thanks for adding your new high score!</p>&#39;;
		echo &#39;<p><strong>Name:</strong> &#39; . $name . &#39;<br />&#39;;
		echo &#39;<strong>Score:</strong> &#39; . $score;
		echo &#39;</p>&#39;;
		echo &#39;<p><< Back to high scores</p>&#39;;

		// Clear the score data to clear the form
		$name = "";
		$score = "";
		$screenshot = "";

		mysqli_close($dbc);
      }
    }
    else {
      echo &#39;<p class="error">Please enter all of the information to add your high score.</p>&#39;;
    }
  }
?>

  <hr />
  
</body> 
</html>
로그인 후 복사

在使用Zend Sutdio10.6调试上面这段PHP代码时我发现“if (move_uploaded_file($_FILES['screenshot']['tmp_name'], $target)) {”这行代码里面的代码块没有执行,查看了超全局变量$_FILES['screenshot']['tmp_name']的值为空,然后我在这行代码前以JSON格式打印出$_FILES变量的值,如下:

{"screenshot":{"name":"Penguins.jpg","type":"","tmp_name":"","error":2,"size":0}}
로그인 후 복사

截图如下:


然后我查询$_FILES["screenshot']['error']为2,上网查询了一下,关于$_FILES超级全局变量大体如下:

PHP编程语言中的常见的$_FILES系统函数用法有: $_FILES['myFile']['name'] 显示客户端文件的原名称。 $_FILES['myFile']['type'] 文件的 MIME 类型,例如"image/gif"。 $_FILES['myFile']['size'] 已上传文件的大小,单位为字节。 $_FILES['myFile']['tmp_name'] 储存的临时文件名,一般是系统默认。 $_FILES['myFile']['error'] 该文件上传相关的错误代码。以下为不同代码代表的意思: 0; 文件上传成功。 1; 超过了文件大小php.ini中即系统设定的大小。 2; 超过了文件大小 MAX_FILE_SIZE 选项指定的值。 3; 文件只有部分被上传。 4; 没有文件被上传。 5; 上传文件大小为0。

另外,查询PHP参考手册关于move_uploaded_file函数的介绍如下:

move_uploaded_file

(PHP 4 >= 4.0.3, PHP 5)

move_uploaded_file — 将上传的文件移动到新位置


说明

bool move_uploaded_file ( string $filename , string $destination )

本函数检查并确保由 filename 指定的文件是合法的上传文件(即通过 PHP 的 HTTP POST 上传机制所上传的)。如果文件合法,则将其移动为由 destination 指定的文件。 

这种检查显得格外重要,如果上传的文件有可能会造成对用户或本系统的其他用户显示其内容的话。 


参数


filename
上传的文件的文件名。 
destination
移动文件到这个位置。 



返回值

成功时返回 TRUE。 

如果 filename 不是合法的上传文件,不会出现任何操作, move_uploaded_file() 将返回 FALSE。 

如果 filename 是合法的上传文件,但出于某些原因无法移动,不会出现任何操作, move_uploaded_file() 将返回 FALSE。此外还会发出一条警告。 
로그인 후 복사

范例

Example #1 Uploading multiple files

<?php
$uploads_dir = &#39;/uploads&#39;;
foreach ($_FILES["pictures"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
        $name = $_FILES["pictures"]["name"][$key];
        move_uploaded_file($tmp_name, "$uploads_dir/$name");
    }
}
?> 
로그인 후 복사
原因终于找到了,是因为我上传了一个超过32768Bytes即32KB大小的Penguins.jpg文件导致出现$_FILES['screenshot']['error']为2的错误,并且$_FILES['screenshot']['tmp_name']为空,move_uploaded_file($_FILES['screenshot']['tmp_name'], $target)函数调用时返回FALSE,if (move_uploaded_file($_FILES['screenshot']['tmp_name'], $target)) {
...
}代码块没有执行。


본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

만료된 WeChat 파일을 복구하는 방법 만료된 WeChat 파일을 복구할 수 있나요? 만료된 WeChat 파일을 복구하는 방법 만료된 WeChat 파일을 복구할 수 있나요? Feb 22, 2024 pm 02:46 PM

WeChat을 열고 내 설정을 선택하고 일반을 선택한 다음 저장 공간을 선택하고 저장 공간에서 관리를 선택한 다음 파일을 복원하려는 대화를 선택하고 느낌표 아이콘을 선택합니다. 튜토리얼 적용 모델: iPhone13 시스템: iOS15.3 버전: WeChat 8.0.24 분석 1 먼저 WeChat을 열고 내 페이지에서 설정 옵션을 클릭합니다. 2 그런 다음 설정 페이지에서 일반 옵션을 찾아 클릭합니다. 3일반 페이지에서 저장 공간을 클릭하세요. 4 그런 다음 저장 공간 페이지에서 관리를 클릭하세요. 5마지막으로 파일을 복구하려는 대화를 선택하고 오른쪽의 느낌표 아이콘을 클릭하세요. 보충: WeChat 파일은 일반적으로 며칠 내에 만료됩니다. WeChat에서 받은 파일을 클릭하지 않은 경우 WeChat 파일을 본 경우 WeChat 시스템에서 해당 파일을 지웁니다.

형식이 지원되지 않거나 파일이 손상되었기 때문에 포토에서 이 파일을 열 수 없습니다. 형식이 지원되지 않거나 파일이 손상되었기 때문에 포토에서 이 파일을 열 수 없습니다. Feb 22, 2024 am 09:49 AM

Windows에서 사진 앱은 사진과 비디오를 보고 관리하는 편리한 방법입니다. 이 애플리케이션을 통해 사용자는 추가 소프트웨어를 설치하지 않고도 멀티미디어 파일에 쉽게 액세스할 수 있습니다. 그러나 때때로 사용자는 사진 앱을 사용할 때 "지원되지 않는 형식이므로 이 파일을 열 수 없습니다."라는 오류 메시지가 표시되거나 사진이나 비디오를 열려고 할 때 파일이 손상되는 등 몇 가지 문제가 발생할 수 있습니다. 이러한 상황은 사용자에게 혼란스럽고 불편할 수 있으므로 문제를 해결하려면 몇 가지 조사와 수정이 필요합니다. 사용자가 사진 앱에서 사진이나 비디오를 열려고 하면 다음 오류가 표시됩니다. 죄송합니다. 해당 형식이 현재 지원되지 않거나 파일이 아니기 때문에 포토에서 이 파일을 열 수 없습니다.

Windows 11/10에서 제거 준비에 시간이 오래 걸림 Windows 11/10에서 제거 준비에 시간이 오래 걸림 Feb 19, 2024 pm 07:42 PM

이 문서에서는 Windows 시스템에서 파일이나 폴더를 삭제할 때 "삭제 준비 완료" 메시지가 나타나는 문제를 해결하는 방법을 소개합니다. 이 프롬프트는 시스템이 파일 권한 확인, 파일이 다른 프로그램에 의해 사용되고 있는지 확인, 삭제할 항목의 크기 계산 등과 같은 일부 백그라운드 작업을 수행하고 있음을 의미합니다. 너무 오래 기다리지 않고 파일을 성공적으로 삭제할 수 있도록 몇 가지 해결 방법을 제공하겠습니다. Windows에서 파일을 삭제하는 데 시간이 오래 걸리는 이유는 무엇입니까? Windows에서 파일 삭제를 준비하는 데 걸리는 시간은 파일 크기, 저장 장치 속도, 백그라운드 프로세스 등 다양한 요인의 영향을 받습니다. "삭제 준비 중" 프롬프트가 길거나 멈춰 있으면 시스템 리소스 부족, 디스크 오류 또는 파일 시스템 문제를 나타낼 수 있습니다. 존재하다

Tmp 형식의 파일을 삭제할 수 있나요? Tmp 형식의 파일을 삭제할 수 있나요? Feb 24, 2024 pm 04:33 PM

Tmp 형식 파일은 일반적으로 실행 중에 컴퓨터 시스템이나 프로그램에 의해 생성되는 임시 파일 형식입니다. 이러한 파일의 목적은 프로그램이 제대로 실행되거나 성능을 향상시키는 데 도움이 되는 임시 데이터를 저장하는 것입니다. 프로그램 실행이 완료되거나 컴퓨터가 다시 시작되면 이러한 tmp 파일은 더 이상 필요하지 않은 경우가 많습니다. 따라서 Tmp 형식 파일의 경우 기본적으로 삭제가 가능합니다. 또한 이러한 tmp 파일을 삭제하면 하드 디스크 공간을 확보하고 컴퓨터의 정상적인 작동을 보장할 수 있습니다. 그러나 Tmp 형식 파일을 삭제하기 전에 다음을 수행해야 합니다.

0x80004005 오류 코드가 나타나는 경우 수행할 작업 편집기에서 0x80004005 오류 코드를 해결하는 방법을 알려줍니다. 0x80004005 오류 코드가 나타나는 경우 수행할 작업 편집기에서 0x80004005 오류 코드를 해결하는 방법을 알려줍니다. Mar 21, 2024 pm 09:17 PM

컴퓨터에서 폴더를 삭제하거나 압축을 풀 때 "오류 0x80004005: 지정되지 않은 오류"라는 프롬프트 대화 상자가 나타나는 경우가 있습니다. 이러한 상황이 발생하면 어떻게 해야 합니까? 실제로 오류 코드 0x80004005가 나타나는 데에는 여러 가지 이유가 있지만 대부분은 바이러스로 인해 발생합니다. 문제를 해결하기 위해 dll을 다시 등록할 수 있습니다. 아래에서는 편집기에서 0x80004005 오류 코드를 처리한 경험을 설명합니다. . 일부 사용자는 컴퓨터를 사용할 때 오류 코드 0X80004005가 표시됩니다. 0x80004005 오류는 주로 컴퓨터가 특정 동적 링크 라이브러리 파일을 올바르게 등록하지 않거나 컴퓨터와 인터넷 간의 HTTPS 연결을 허용하지 않는 방화벽으로 인해 발생합니다. 그렇다면 어떨까요?

Quark Cloud Disk에서 Baidu Cloud Disk로 파일을 전송하는 방법은 무엇입니까? Quark Cloud Disk에서 Baidu Cloud Disk로 파일을 전송하는 방법은 무엇입니까? Mar 14, 2024 pm 02:07 PM

Quark Netdisk와 Baidu Netdisk는 현재 파일 저장에 가장 일반적으로 사용되는 Netdisk 소프트웨어입니다. Quark Netdisk의 파일을 Baidu Netdisk에 저장하려면 어떻게 해야 합니까? 이번 호에서는 편집자가 Quark Network Disk 컴퓨터에서 Baidu Network Disk로 파일을 전송하는 방법에 대한 튜토리얼 단계를 정리했습니다. Quark 네트워크 디스크 파일을 Baidu 네트워크 디스크에 저장하는 방법은 무엇입니까? Quark Network Disk에서 Baidu Network Disk로 파일을 전송하려면 먼저 Quark Network Disk에서 필요한 파일을 다운로드한 다음 Baidu Network Disk 클라이언트에서 대상 폴더를 선택하고 열어야 합니다. 그런 다음 Quark Cloud Disk에서 다운로드한 파일을 Baidu Cloud Disk 클라이언트가 연 폴더에 끌어서 놓거나 업로드 기능을 사용하여 Baidu Cloud Disk에 파일을 추가합니다. 업로드가 완료된 후 파일이 Baidu Cloud Disk에 성공적으로 전송되었는지 확인하세요. 그게 다야

GHO 파일을 설치하는 방법 GHO 파일을 설치하는 방법 Feb 19, 2024 pm 10:06 PM

gho 파일은 일반적으로 전체 하드 디스크나 파티션 데이터를 파일로 백업하는 데 사용되는 GhostImage 이미지 파일입니다. 일부 특정 경우에는 하드 드라이브나 파티션을 이전 상태로 복원하기 위해 이 gho 파일을 하드 드라이브에 다시 설치해야 합니다. gho 파일을 설치하는 방법은 다음과 같습니다. 먼저, 설치하기 전에 다음 도구와 자료를 준비해야 합니다. Entity gho 파일: 일반적으로 접미사가 .gho이고 백업이 포함된 완전한 gho 파일이 있는지 확인합니다.

업로드 실패, 파일을 비워둘 수 없음, 일관성 없는 오류 업로드 실패, 파일을 비워둘 수 없음, 일관성 없는 오류 Feb 19, 2024 pm 01:21 PM

Discorde는 널리 사용되는 파일 공유 플랫폼이지만 사용자는 파일 업로드 시 업로드 실패, 파일을 비울 수 없는 등의 오류가 발생할 수 있습니다. 아직 명확한 설명은 없지만 이러한 오류가 무작위로 나타나 특정 파일이 업로드되지 않거나 이전에 보낸 파일을 다시 업로드하지 못할 수도 있습니다. 업로드 실패 수정, 파일을 비울 수 없음 불일치 오류 업로드가 실패할 때 파일을 비울 수 없음 오류가 발생하면 실망스러울 수 있습니다. 다음은 도움이 되기를 바라는 몇 가지 제안된 솔루션입니다. iOS, Android 사용자 가능 파일 확인 파일 공유 전 압축 업데이트/재설치 불일치 1] iOS, Android 사용자 가능 iPhone, Android 사용자에서 오류로 인해 파일 업로드가 실패함

See all articles