2011-11-22 40 views
0

我有一个脚本,用readfile()读取一个mp3文件(我也试过fread()和一个循环)。在一个特定的文件中,我收到了500错误。所有其他文件似乎读得很好。用PHP读取文件给出了500错误

当我检查我的服务器上的错误日志时,我发现当试图读取此特定文件时,我正在收到PHP内存错误。

任何人都可以给我一些指示什么可能会发生?

+0

听起来像是内存不足 - 文件有多大?你的服务器的内存限制是什么? – nickb

+0

你可以发布你想用文件做什么的代码?文件有多大?你的memory_limit有多大? – Arend

回答

1

您已经指出了这个问题 - PHP内存不足。 PHP中最大的内存使用量受到ini设置的限制。

您可以在运行时在脚本的顶部ini_set设置:

ini_set('memory_limit', '64M'); 

或者说,它需要对所有脚本效果,你可以将它设置在php.ini文件:

memory_limit = 64M; 

最后,您可以看到正在执行的脚本使用的内存memory_get_usage()

+0

你给出的第二个例子是'.htaccess'文件,而不是php.ini文件。 – Cyclone

+0

对不起。现在修复它。 –

+0

这真的没有解决我的问题。我做了别的。使用一个名为smartreadfile.php的脚本,我认为它以块的形式读取文件。无论如何,这是我现在的经历中最好的格式化答案。 – stoi2m1

0

mp3文件的文件大小大于memory_limit。如果你想从这个mp3文件读取,你需要增加PHP可以访问的内存量。

如果您有权访问php.ini文件,您可以找到memory_limit = 16M ;,并用无论您需要多少内存来替换该值。

如果没有php.ini文件访问和你有访问的.htaccess,添加:

php_value memory_limit 16M

和替换值。

如果您没有,请尝试压缩mp3文件或以其他方式减少执行此操作所需的内存量。尝试清除未使用的变量并占用大量内存。

0

那么,PHP可能会在完成脚本之前内存不足。你可以增加内存php可以通过改变php.ini中的memory_limit选项来运行。

+0

只是一个说明,国际海事组织提出的针对OP的问题更适合评论,而不是答案。 – nickb

+0

你说得对,我会改变它。 – Arend

0

尝试增加执行时间: set_time_limit(300); // 300秒 ini_set('memory_limit','16M'); //增加到某个值,如16 MB

+0

这改变了时间限制,而不是内存 – Cyclone

0

最有可能超过最大内存。这可以在php.ini中进行调整,请点击此处: