每次尝试上传文件时都会收到以下错误。
“警告:文件上传错误 - 无法在第0行的未知中创建临时文件”
这是我的HTML表单,
<form action="./inventory_list.php" enctype="multipart/form-data" name="myForm" id="myForm" method="post">
<table width="625" border="1" cellpadding="5">
<tr>
<td width="84">Product Name</td>
<td width="399"><input type="text" name="product_name" id="product_name"></td>
</tr>
<tr>
<td>Product Price</td>
<td><label for="textfield2">Rs:</label>
<input type="text" name="price" id="price"></td>
</tr>
<tr>
<td>Category</td>
<td><select name="category" id="category">
<option value="" selected="selected"></option>
<option value="Bedroom ">Bedroom </option>
<option value="Living">Living room</option>
<option value="Dining">Dining</option>
</select></td>
</tr>
<tr>
<td>Sub - Category</td>
<td><select name="subcategory" id="subcategory">
<option value="" selected="selected"></option>
<option value="dinet">Dining tables</option>
<option value="shoe">shoe racks</option>
<option value="wardrobe">wardrobes</option>
<option value="sofa">sofa</option>
</select></td>
</tr>
<tr>
<td>Product Details</td>
<td><textarea name="details" cols="50" rows="10" id="details"></textarea></td>
</tr>
<tr>
<td>Product Image</td>
<td><label>
<input type="file" name="fileField" id="fileField"/>
</label></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="button" id="button" value="Add this Item now"></td>
</tr>
</table>
</br>
</form>
这是我的PHP代码,
if(isset($_POST["product_name"]))
{
$product_name = mysql_real_escape_string($_POST["product_name"]);
$price= mysql_real_escape_string($_POST["price"]);
$category= mysql_real_escape_string($_POST["category"]);
$subcategory= mysql_real_escape_string($_POST["subcategory"]);
$details= mysql_real_escape_string($_POST["details"]);
//see if duplicate product exists
$sql = mysql_query("select id from products where product_name='$product_name' limit 1");
$product_match = mysql_num_rows($sql); //count the output
if($product_match>0)
{
echo "The product name already exists";
exit();
}
$sql= mysql_query("INSERT INTO `mystore`.`products` (`product_name`, `price`, `details`, `category`, `subcategory`, `date_added`) VALUES ( '$product_name', '$price', '$details', '$category', '$subcategory', now());")or die(mysql_error());
$pid = mysql_insert_id();
$newname = "$pid.jpg";
move_uploaded_file($_FILES['fileField']['tmp_name'],'../inventory_images/$newname');
}
我试图在localhost上传, 测试服务器:XAMPP, 操作系统:MAC 10.8
长期坚持这一点,我尝试了很多东西,但没有任何工作。
答案 0 :(得分:7)
在终端类型中:
chmod -R 777 /your/upload/folder
通过执行以下代码,您可以知道php上传文件的文件夹:
$tmp_dir = ini_get('upload_tmp_dir') ? ini_get('upload_tmp_dir') : sys_get_temp_dir();
die($tmp_dir);
在我的情况下,我得到/var/...
所以当我获得777许可时,我没有得到任何错误。
修改
将777设置为/var
是危险的,因此您只需将其设置为php上传文件的文件夹(您可以购买上面的代码)。
答案 1 :(得分:3)
您应该检查您的php.ini并查找&#39; upload_tmp_dir&#39;选项。默认为空。之后,检查您的tmp目录的权限。如果您想知道您的服务器正在使用的upload_tmp_dir,您只需使用此代码片段
$tmp_dir = ini_get('upload_tmp_dir') ? ini_get('upload_tmp_dir') : sys_get_temp_dir();
die($tmp_dir);
最后在终端shell中,您可以输入:chmod -R 777&#39; your_tmp_upload_dir&#39;
答案 2 :(得分:2)
从WordPress上传文件时遇到同样的错误。我在apache error log file
中遇到了这个错误:
“PHP警告:文件上传错误 - 无法创建临时文件 在未知“。
我通过在upload_tmp_dir
中注释掉/etc/php.ini
来修正错误。 upload_tmp_dir
设置为/tmp
。我还设置了date.timezone
。重新启动服务器后,我可以从WordPress上传媒体文件。
似乎php没有权限写入/tmp
文件夹。
答案 3 :(得分:1)
可能是/ tmp目录问题。检查/ tmp是否具有正确的访问权限和足够的空间大小。
答案 4 :(得分:1)
如果您不知道它是什么,那就是SeLinux
chcon -R -h -t httpd_sys_script_rw_t /usr/share/nginx/tmp
chown -R nginx:nginx /usr/share/nginx/tmp
chmod -R ug+rw /usr/share/nginx/tmp
tmp目录,chroot中的上传目录需要设置为/ tmp not full path
答案 5 :(得分:1)
最近在 Laravel 和 Wordpress(php 版本 7.3)中工作时出现此错误“文件上传错误 - 无法在第 0 行的未知中创建临时文件”
对我有用的解决方案是。希望这可以帮助任何面临此类问题的人。
除了您的其他 ini 设置之外,还专门在 php.ini 中添加以下几行。
upload_tmp_dir = on
upload_tmp_dir = "/path/to/tmp/folder"
这里的路径类似于 /home/cpanel username/public_html/folder/project/tmp
注意:如果您在 Laravel 中工作......如果您将文件存储在存储文件夹中,请不要忘记链接存储文件夹。为此,请在终端下运行以下命令。
php artisan storage:link
答案 6 :(得分:0)
在../ inventory_images / $ newname中使用双引号。
更改此行
move_uploaded_file($_FILES['fileField']['tmp_name'],'../inventory_images/$newname');
AS
move_uploaded_file($_FILES['fileField']['tmp_name'],'../inventory_images/'.$newname);
注:
在PHP中使用单引号$ newname将显示为字符串。
用于显示变量的值使用双引号
答案 7 :(得分:0)
更改“上传”目录的权限。您需要先让Web服务器访问它,然后再将文件移入其中..
将您的上传文件夹权限“Read only
”更改为“Read & Write
”
**Edited**
答案 8 :(得分:0)
您没有说明您的平台是什么,但如果它是Fedora(17+)的更高版本,则服务文件中PrivateTmp = true的设置可能会导致此问题。使用PrivateTmp = false在/ etc中创建服务文件至少是一种解决方法,尽管它涉及回滚安全功能。
答案 9 :(得分:0)
在我的情况下,它是由从控制台而不是服务运行httpd.exe Apache服务器引起的。
答案 10 :(得分:0)
对我来说,此问题是由于服务器上缺少Inode所致:
df -ih
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/xvda1 512K 512K 0 100% /
使用https://stackoverflow.com/a/9387415/7637065标识了罪魁祸首目录 并删除了不需要的文件。
答案 11 :(得分:0)
如果现有答案都无效,那么我的问题是Windows文件夹限制为65,560个项目。清除文件夹后,它便开始重新工作。
答案 12 :(得分:0)
open_basedir=/tmp:/rootdir
重新启动apache:systemctl restart apache2
chmod 777 /tmp
chmod -Rf a+x sites/default/files
答案 13 :(得分:0)
当我在 WP 服务器上安装外部磁盘作为 /tmp
时,我遇到了同样的问题。我还看到一些文章建议完全 /tmp
清理(通过 rm -rf /tmp/*
)会导致类似的事情。
我花了一段时间才弄清楚如何修复它,因为主要的嫌疑人是 wp-config.php
和 php.ini
。但事实证明,那些是红鲱鱼,不设置 WP_TEMP_DIR
或创建您的自定义 php.ini
(我的图像只有 php.ini-development
和 php.ini-production
)完全没问题。 Wordpress 具有识别临时目录的合理默认行为。
在操作任何配置之前,请确保您的 /tmp
目录完好无损并且没有任何异常(例如不同的文件系统、符号链接等)