php文件上传POST大小超限修改方法

 更新时间:2016年11月25日 17:37  点击:1847
上传文件出现问题, 检查了一遍发现是php.ini配置问题我们只要修改php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项即可。

php的配置:

 代码如下 复制代码

upload_max_filesize = 200M


nginx配置:

 代码如下 复制代码

client_max_body_size 200m;

按说没啥了额, 又怀疑是否是 nginx 做反向代理这里的限制,也检查过了没问题。

又仔细观察了一下 , $_POST 过来的数据是空的, 难道是 POST 大小的问题?  检查了php.ini, 还真的有一个配置项:

 代码如下 复制代码

upload_max_filesize = 8M

改为 200M, 重启一下 php, OK!! 搞定!!  还真的是 POST过来的数据大小超过限制了!

下现附给没有服务器操作权限的朋友

在PHP上传上加入下面的代码,即可暂时让PHP能上传大文件,如下

 代码如下 复制代码

<?php 
//HTTP上传文件的开关,默认为ON即是开 
ini_set('file_uploads','ON');
//通过POST、GET以及PUT方式接收数据时间进行限制为90秒 默认值:60 
ini_set('max_input_time','90');
//脚本执行时间就由默认的30秒变为180秒 
ini_set('max_execution_time', '180');
//Post变量由2M修改为8M,此值改为比upload_max_filesize要大 
ini_set('post_max_size', '12M');
//上传文件修改也为8M,和上面这个有点关系,大小不等的关系。
ini_set('upload_max_filesize','10M'); 
//正在运行的脚本大量使用系统可用内存,上传图片给多点,最好比post_max_size大1.5倍 
ini_set('memory_limit','20M');
?> 

有此主机商是把ini_set函数禁止使用了,我们可以使用下面函数来检测

 代码如下 复制代码

<?php 
echo ini_get('file_uploads')."n";  
echo ini_get('max_input_time')."n";  
echo ini_get('max_execution_time')."n";  
echo ini_get('post_max_size')."n";  
echo ini_get('upload_max_filesize')."n";  
echo ini_get('memory_limit')."n";  
?>

我们使用date函数直接显示后面带有date("Y-m-d H:i:s",$t);发现显示的为1970-01-01了,这个问题对于新手来讲可能不好理解,但对于做过几年的高手来讲小菜了。

如date("Y-m-d H:i:s",$t);。但是这样是无法调出正确的时间的,该值为空,所以会显示1970-01-01的问题

问题是国类$t是一个不正确的时间截了,我们只要利用如$t =time()这样就可以了显示正确了。

例子

echo date("Y-m-d",time());

输入是

2014.05.11

我碰到过这样的一个问题也给大家分析一下,碰到存储数据库的日期格式为 2009-1-22 了,如果我们还使用


echo date("Y-m-d",'2009-1-22');这样也会有问题 1970-01-01

echo date("Y-m-d",'abc'); 也会有问题 1970-01-01

今天忽然发现安装的主机控制面板报这个错误,但是功能还是可以正常使用。网上找了下有两种解决方法,希望下面的方法来给大家带来帮助哦。

看到错误提示如下

Warning: Call-time pass-by-reference has been deprecated in E:网站目录www目录a.php on line 46

Warning: Call-time pass-by-reference has been deprecated in E:网站目录www目录a.php on line 47

Warning: Call-time pass-by-reference has been deprecated in E:网站目录www目录a.php on line 47

Warning: Call-time pass-by-reference has been deprecated in E:网站目录www目录a.php on line 48

Warning: Call-time pass-by-reference has been deprecated in E:网站目录www目录a.php on line 49

Warning: Call-time pass-by-reference has been deprecated in E:网站目录www目录a.php on line 51

Warning: Call-time pass-by-reference has been deprecated in E:网站目录www目录a.php on line 56

Warning: Call-time pass-by-reference has been deprecated in E:网站目录www目录a.php on line 56

解决办法如下:


方法1:

把php.ini的display_errors = on改成display_errors = off // (不显示错误)
就不显示了。
但是这种方法不是太好,只是不显示错误,其实错误还是存在的。

方法2:

1. 在PHP.ini中搜索关键字 : allow_call_time_pass_reference 没有的自行建立。
2. 将 Off 改成 On ,Web Server重起就OK了~
allow_call_time_pass_reference = Off 变成 allow_call_time_pass_reference = On

顺便解释下allow_call_time_pass_reference这个参数的含义:
是否启用在函数调用时强制参数被按照引用传递。此方法已不被赞成并在 PHP/Zend 未来的版本中很可能不再支持。鼓励使用的方法是在函数定义中指定哪些参数应该用引用传递。鼓励大家尝试关闭此选项并确保脚本能够正常运行,以确保该脚本也能在未来的版本中运行(每次使用此特性都会收到一条警告,参数会被按值传递而不是按照引用传递)。

在函数调用时通过引用传递参数是不推荐的,因为它影响到了代码的整洁。如果函数的参数没有声明作为引用传递,函数可以通过未写入文档的方法修改其参数。要避免其副作用,最好仅在函数声明时指定那个参数需要通过引用传递。

这两天决定试一把 Perl6,因为扶凯兄已经把还没有正式发行 Rakudo Star 包的 MoarVM 编译打包好了,所以可以跳过这步直接进入模块安装。当然,源码编译本身也没有太大难度,只不过从 github 下源码本身耗时间比较久而已。

既然木有 Star 包,那么安装好 MoarVM 上的 Rakudo 后我们就有必要先自己把 panda 之类的工具编译出来。这一步需要注意一下你的 @*INC 路径和实际的 $PERL6LIB 路径,已经编译之后的 panda 存在的 $PATH 是不是都正确,如果不对的修改一下 ~/.bashrc 就好了。

我的尝试迁移对象是一个很简单的 Puppet 的 ENC 脚本,只涉及 SQLite 的读取,以及 YAML 格式的输出。通过 panda install DBIish 命令即可安装好 DBIish 模块。

脚本本身修改起来难度不大,结果如下:

 代码如下 复制代码
#!/usr/bin/env perl6
use v6;
use DBIish;
use YAML;
my $base_dir = "/etc/puppet/webui";
# 函数在 Perl6 中依然使用 sub 关键字定义,不过有个超酷的特性是 multi sub
# 脚本中没有用到,但是在 YAML::Dumper 中遍地都是,这里也提一句。
# MAIN 函数在 Perl6 里可以直接用 :$opt 命令参数起 getopt 的作用
# 不过 ENC 脚本就是直接传一个主机名,用不上这个超酷的特性
sub MAIN($node) {
# connect 方法接收参数选项是 |%opts,所以可以把哈希直接平铺写
# 这个 | 的用法一个月前在《Using Perl6》里看到过
    my $dbh = DBIish.connect( 'SQLite', database => "{$base_dir}/node_info.db" );
    my $sth = $dbh.prepare("select * from node_info where node_fqdn = ?");
    $sth.execute("$node");
    my $ret = $sth.fetchrow_hashref;
    my $res;
    if ( !$ret ) {
        $res = {
# Perl5 的 qw() 在 Perl6 里直接写成 <> 。也不用再通过 [] 来指明是引用
            classes     => <puppetd repos>,
            environment => 'testing',
        };
    }
    else {
        $res = {
            environment => $ret{'environment'},
            parameters  => { role => $ret{'role'} },
            classes     => {},
        };
# 这个 for 的用法,在 Perl5 的 Text::Xslate 模板里就用过
        for split(',', $ret{'classes'}) -> $class {
            if ( $class eq 'nginx' ) {
# 这个 <== 符号指明数据流方向,完全可以把数组倒过来,然后用 ==> 写这行
# 如果不习惯这种流向操作符的,可以用,号,反正不能跟 Perl5 那样啥都不写
# 这里比较怪的一点是我试图把这么长的一句分成多行写,包括每行后面加,我看到 YAML 代码里就用分行了,但是我这就会报错
# Perl6 的正则变化较大,这里 /^#/ 要写成 /^'#'/ 或者 /^x23/
# 正则 // 前面不加 m// 不会立刻开始匹配
# 原先的 s///g 可以写作 s:g///,也可以写作对象式的 .subst(m//, '', :g),. 前面为空就是默认的 $_
# 捕获的数据存在 @() 数组里,也可以用 $/[i] 的形式获取
# 字符串内插时,不再写作 ${*},而是 {$*} 的形式
# 命名捕获这里没用上,写个示例:
#     $str ~~ /^(w+?)$<laststr>=(w ** 4)w$/;
#     $/<laststr>.chomp.say;
# 注意里面的 w{4} 变成了 w ** 4
                my @needs <== map { .subst(m/^(.+):(d+)$/, "{$/[0]} max_fails=30 weight={$/[1]}", :g) } <== grep { !m/^x23/ } <== split(',', $ret{'extstr'});
                $res{'classes'}{'nginx'}{'iplist'} = @needs;
            }
            else {
# Perl5 的 undef 不再使用,可以使用 Nil 或者 Any 对象
                $res{'classes'}{$class} = Nil;
            }
        }
    };
    $dbh.disconnect();
# 这个 dump 就是 YAML 模块导出的函数
# Perl6 的模块要导出函数不再需要 Exporter 那样,直接用 our sub dump($obj) {} 就可以了
    say dump($res);
};

但是麻烦的是 YAML 模块本身,这个模块是 ingydotnet 在好几年前草就,后来就没管了,实际现在压根跑不起来。花了半天时间,一边学习一边修改,总算修改正常了。主要涉及了 Attribute 对象,Nil 对象,twigls 前缀符,:exists 定义几个概念,以及 YAML 格式本身的处理逻辑。

YAML 模块修改对比如下:

 代码如下 复制代码

diff --git a/lib/YAML/Dumper.pm b/lib/YAML/Dumper.pm
index d7a7981..ec47341 100644
--- a/lib/YAML/Dumper.pm
+++ b/lib/YAML/Dumper.pm
@@ -2,16 +2,16 @@ use v6;
 class YAML::Dumper;
 has $.out = [];
-has $.seen is rw = {};
+has $.seen = {};
 has $.tags = {};
 has $.anchors = {};
 has $.level is rw = 0;
-has $.id is rw = 1;
+has $.id = 1;
 has $.info = [];
 method dump($object) {
     $.prewalk($object);
-    $.seen = {};
+    $!seen = {};
     $.dump_document($object);
     return $.out.join('');
 }
@@ -45,11 +45,11 @@ method dump_collection($node, $kind, $function) {
 method check_special($node) {
     my $first = 1;
-    if $.anchors.exists($node.WHICH) {
-    if $.anchors.exists($node.WHICH) {
+    if $.anchors{$node.WHICH}:exists {
         push $.out, ' ', '&' ~ $.anchors{$node.WHICH};
         $first = 0;
     }
-    if $.tags.exists($node.WHICH) {
+    if $.tags{$node.WHICH}:exists {
         push $.out, ' ', '!' ~ $.tags{$node.WHICH};
         $first = 0;
     }
@@ -64,7 +64,7 @@ method indent($first) {
             return;
         }
         if $.info[*-1]<kind> eq 'seq' && $.info[*-2]<kind> eq 'map' {
-            $seq_in_map = 1;
+            $seq_in_map = 0;
         }
     }
     push $.out, "n";
@@ -155,7 +155,8 @@ method dump_object($node, $type) {
     $.tags{$repr.WHICH} = $type;
     for $node.^attributes -> $a {
         my $name = $a.name.substr(2);
-        my $value = pir::getattribute__PPs($node, $a.name);     #RAKUDO
+        #my $value = pir::getattribute__PPs($node, $a.name);     #RAKUDO
+        my $value = $a.get_value($node);                         #for non-parrot
         $repr{$name} = $value;
     }
     $.dump_node($repr);
这里的 $.seen 和 $!seen 是不是晕掉了?其实 $.seen 就相当于先声明了 $!seen 后再自动创建一个 method seen() { return $!seen }。

另一处是 pir::getattribute__PPs() 函数,pir 是 parrot 上的语言,而 MoarVM 和 JVM 上都是先实现了一个 nqp 再用 nqp 写 Perl6,不巧的是这个 pir 里的 getattribute__PPs() 刚好至今还没有对应的 nqp 方法。(在 pir2nqp.todo 文件里可见)

所以只能用高级的 Perl6 语言来做了。

总的来说,这个 yaml-pm6 代码里很多地方都是试来试去,同样的效果不同的写法,又比如 .WHICH 和 .WHAT.perl 也是混用。 而且我随手测试了一下,即使在 parrot 上,用 pir::getattribute__PPs 的速度也比 Attribute.get_value 还差点点。

最后提一句,目前 ENC 脚本在 perl5、perl6-m、perl6-p、perl6-j 上的运行时间大概分别是 0.13、1.5、2.8、12s。MoarVM 还差 Perl5 十倍,领先 parrot 一倍。不过 JVM 本身启动时间很长,这里不好因为一个短时间脚本说它太慢。

另外还试了一下如果把我修改过的 YAML::Dumper 类直接写在脚本里运行,也就是不编译成 moarvm 模块,时间大概是 2.5s,比 parrot 模块还快点点。

不过如何把 perl6 脚本本身编译成 moarvm 的 bytecode 格式运行还没有研究出来,直接 perl6-m --target=mbc --output=name.moarvm name.pl6 得到的文件运行 moar name.moarvm 的结果运行会内存报错。

原文来自:tiejiang.org

今天本来说要测试一个新网站的,结果发现打开之后提示Fatal error: Call to undefined function get_header() in 错误了,下面我就给大家整理此问题解决办法。

效果就成这样了。

Fatal error: Call to undefined function get_header() in /home/wwwfulis/public_html/index.php on line 1;

在wordpress中这个应该算是比较正常的情况,因为基本都是调用模板函数,简单翻译一下就是get_header()这个函数没有定义。

到网 站查询了很多资料都没有显示有效的结果,没办法只好根据他们提供的信息综合分析一下,最后发现这个问题导致的原因有如下的几种,

1.检查这个函数是否是拼写错误 在php里,内置有get_headers() 函数,但是在xammp上面能够调制,为什么在这上面就不能调试了呢。 该函数的功用是:返回一个数组,包含有服务器响应一个 HTTP 请求所发送的标头。如果失败则返回 FALSE 并发出一条 E_WARNING 级别的错误信息

2.检查是否在其它地方定义了这个函数.


如果自己有设置主机php.ini的权限,不操心log的话,可以修改如下,就不会有错误提示了:

 代码如下 复制代码


display_errors = off
error_reporting=E_ALL&~E_NOTICE

因为没有权限懂php.ini,于是,我在index.php中添加不显示运行错误:

 代码如下 复制代码
<?php ini_set('display_errors', 0); ?>

这样以后就没有了错误提示,可是error-log中依旧记录着该错误,如何不记录这个错误呢?如果直接加载index.php且没有定义get_header()这个函数,就直接重定向到网站首页,所以一个简单地判断就可以搞定了。

 

 代码如下 复制代码
<?php ini_set('display_errors', 0); ?>
<?php
/*
 @FileName:index.php
 @Aurthor: OneDou [http://oneodu.com]
 @LastModifed:2013-6-10 下午11:27:33
 @Charset:UTF-8
*/
if (function_exists('get_header')) {
    get_header();
}else{
    header("Location: http://" . $_SERVER['HTTP_HOST'] . "");
    exit;
}; ?>

Ok,这样如果直接访问index.php就被重定向到了首页

[!--infotagslink--]

相关文章

  • php读取zip文件(删除文件,提取文件,增加文件)实例

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • Jupyter Notebook读取csv文件出现的问题及解决

    这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06
  • Photoshop打开PSD文件空白怎么解决

    有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • C#实现HTTP下载文件的方法

    这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • pytorch nn.Conv2d()中的padding以及输出大小方式

    今天小编就为大家分享一篇pytorch nn.Conv2d()中的padding以及输出大小方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-27
  • php无刷新利用iframe实现页面无刷新上传文件(1/2)

    利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25
  • Php文件上传类class.upload.php用法示例

    本文章来人大家介绍一个php文件上传类的使用方法,期望此实例对各位php入门者会有不小帮助哦。 简介 Class.upload.php是用于管理上传文件的php文件上传类, 它可以帮...2016-11-25
  • php批量替换内容或指定目录下所有文件内容

    要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
  • PHP文件上传一些小收获

    又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
  • jQuery实现简单的文件上传进度条效果

    本文实例讲述了jQuery实现文件上传进度条效果的代码。分享给大家供大家参考。具体如下: 运行效果截图如下:具体代码如下:<!DOCTYPE html><html><head><meta charset="utf-8"><title>upload</title><link rel="stylesheet...2015-11-24
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
  • AI源文件转photoshop图像变模糊问题解决教程

    今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
  • C++万能库头文件在vs中的安装步骤(图文)

    这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
  • php文件上传你必须知道的几点

    本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
  • ant design中upload组件上传大文件,显示进度条进度的实例

    这篇文章主要介绍了ant design中upload组件上传大文件,显示进度条进度的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-29
  • C#使用StreamWriter写入文件的方法

    这篇文章主要介绍了C#使用StreamWriter写入文件的方法,涉及C#中StreamWriter类操作文件的相关技巧,需要的朋友可以参考下...2020-06-25
  • php实现文件下载实例分享

    举一个案例:复制代码 代码如下:<?phpclass Downfile { function downserver($file_name){$file_path = "./img/".$file_name;//转码,文件名转为gb2312解决中文乱码$file_name = iconv("utf-8","gb2312",$file_name...2014-06-07