php文件上载问题
我似乎无法用PHP上传文件。据我所知,一切正常。我甚至还翻出了旧课本,直接从课文中抄袭了这个例子,但仍然没有成功 起初,我认为这是一个目录权限的问题,文件保存在那里,所以我将权限更改为777,但仍然没有。如果有人有任何建议,我洗耳恭听:/ 以下是代码(HTML):php文件上载问题,php,file,upload,Php,File,Upload,我似乎无法用PHP上传文件。据我所知,一切正常。我甚至还翻出了旧课本,直接从课文中抄袭了这个例子,但仍然没有成功 起初,我认为这是一个目录权限的问题,文件保存在那里,所以我将权限更改为777,但仍然没有。如果有人有任何建议,我洗耳恭听:/ 以下是代码(HTML): PHP文件: <?php $tmp_name = $_FILES['file1']['tmp_name']; $path = getcwd() . DIRECTORY_SEPARATOR . 'images'; $name
PHP文件:
<?php
$tmp_name = $_FILES['file1']['tmp_name'];
$path = getcwd() . DIRECTORY_SEPARATOR . 'images';
$name = $path . DIRECTORY_SEPARATOR . $_FILES['file1']['name'];
$success = move_uploaded_file($tmp_name, $name);
if($success) {
$upload_message = $name . ' has been uploaded.';
echo "$upload_message";
} else {
echo "something went wrong :(";
}
?>
您需要确保您有写入上载\u tmp\u dir的权限,检查php.ini中的post\u max\u size和upload\u max\u filesize限制是否大于您尝试上载的文件。此外$\u文件还包含错误信息,请将其转储,以便获得有关未按预期发生的情况的更多信息。在尝试移动上载错误之前,应先检查上载错误,然后才能跟踪问题:
以下是一个基本示例:
<?php
error_reporting(-1);
$uploaddir = './images/';
// Check for upload attempt
if(isset($_FILES['file1'])){
$uploadfile = $uploaddir.basename($_FILES['file1']['name']);
// If no error
if($_FILES['file1']['error'] == 0){
//Attempt to move
if (move_uploaded_file($_FILES['file1']['tmp_name'], $uploadfile)) {
echo "File is valid, and was successfully uploaded.";
}else{
echo 'Error moving file.';
}
} else {
// Has error
$errors = array(0=>'OK',
1=>'UPLOAD_ERR_INI_SIZE',
2=>'UPLOAD_ERR_FORM_SIZE',
3=>'UPLOAD_ERR_PARTIAL',
6=>'UPLOAD_ERR_NO_TMP_DIR',
7=>'UPLOAD_ERR_CANT_WRITE',
8=>'UPLOAD_ERR_EXTENSION'
);
echo "Error: ".$errors[$_FILES['file1']['error']];
}
}
我不太确定这是否有效,还没有尝试过
<?
$uploadpath = '../images/';
if ($_FILES["file1"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file1"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file1"]["name"] . "<br />";
echo "Type: " . $_FILES["file1"]["type"] . "<br />";
echo "Size: " . ($_FILES["file1"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file1"]["tmp_name"] . "<br />";
}
if (file_exists($uploadpath . $_FILES["file1"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
$uploadpath . $_FILES["file"]["name"]);
echo "UPLOAD SUCCESS!";
}
?>
来源:W3school代码在实际文件中的结构不是这样的……html和php处于正确的位置。我刚刚上传了这两个部分,这样人们就可以在不包含整个文件的情况下同时看到这两个方面。在移动上传文件()之前,$name
解析为什么?$name解析为/var/www/site.net/aClass/images/在移动上传文件()之前…我不确定$success的回报值是多少。我尝试回显它,但没有得到任何回复(回显“$success”),这很奇怪:/我尝试了上面的方法,但发生了同样的事情…页面回显,然后没有显示任何内容来说明是否发生了错误…“非常小心允许上传”。那么,如何设计一个包含用户图片的网站?上传似乎充满了问题。图片很简单,你可以使用getimagesize()
这样的函数检查它是否是有效的图片,拒绝cgi访问上传目录&如果是web根目录,则将其存储,并且不允许像php这样的任何文件类型的上传。使用传递脚本将文件与php接口。post_max_size和upload_max_filesize的值都在范围内,但是upload_tmp_dir被注释掉了,并且声明如果未指定值,将使用系统默认值…不确定默认值是什么,但我将其设置为=On。正如我在下面这篇文章的评论中所说的,从$文件中转储错误有问题…嗯…upload\u tmp\u dir是一个目录,将其设置为On几乎肯定不起作用,请尝试类似于/tmp
(Linux上)或c:\directorypcanwritein
(Windows上)的方法。该目录应该已经存在,并且应该允许运行php的用户写入该目录。同样对于$_文件,只需执行var_转储($_文件['file1']['error'])
或者您可以只查看整个var\u dump($\u文件)代码>我修复了php.ini文件并确保/tmp目录具有777权限…错误仍然存在。我还做了echo'd var_dump($_文件);它以“array(0){}”的形式返回,好像它从来没有走那么远??好吧,所以在我看来,这段代码没有错……它应该可以工作,它确实可以工作,但不能在这个服务器上工作。我在一个完全不同的服务器上创建了一个例子,上面的代码与我在服务器上测试的代码完全相同,我在服务器上发现了问题,它工作得非常完美…所以问题就出在服务器的某个地方…可能在php.ini文件中,但我不确定是什么参数导致了这个问题?有什么建议吗?试着给php开发人员发邮件,或者如果他们有irc频道,请在那里询问。我有一个用于当前网站开发的代码,请告诉我上述解决方案是否有效。我将给你我的代码,它几乎与上面的代码相同,但我的代码由mysql Queries组成。好吧,我刚刚尝试了上面的代码(修复了最后一个else子句中的语法错误),问题仍然存在。每当我尝试上传回发时,代码都会执行,$\u FILES[“file1”][“error”]等于0,但没有任何信息返回(应该位于“upload:”、“Type:”等旁边的内容),文件也没有上传……这太荒谬了……有什么想法吗??,好吧,所以在我看来,这段代码并没有什么问题……它应该可以工作,它确实可以工作,但不能在这个服务器上工作。我在一个完全不同的服务器上创建了一个例子,上面的代码与我在服务器上测试的代码完全相同,我在服务器上发现了问题,它工作得非常完美…所以问题就出在服务器的某个地方…可能在php.ini文件中,但我不确定是什么参数导致了这个问题?有什么建议吗?可能是php.ini的原因,如果您使用的是xampp,您可以用my php.ini覆盖它:
<?
$uploadpath = '../images/';
if ($_FILES["file1"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file1"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file1"]["name"] . "<br />";
echo "Type: " . $_FILES["file1"]["type"] . "<br />";
echo "Size: " . ($_FILES["file1"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file1"]["tmp_name"] . "<br />";
}
if (file_exists($uploadpath . $_FILES["file1"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
$uploadpath . $_FILES["file"]["name"]);
echo "UPLOAD SUCCESS!";
}
?>