【发布时间】:2013-07-16 22:32:50
【问题描述】:
使用 Laravel 框架,我使用File::get() 方法访问public/css 目录中的CSS文件,对于既存在又具有内容的文件返回null:
PHP 代码是:
private static $css_files = array(
"main" => 'css/main.css',
"layout" => 'css/layout.css'
);
public static function get_css ($vars) {
$file = self::$css_files[$vars["file_name"]];
$contents = File::get(path('public').$file, "File Not Found ($file)");
return json_encode(array("file" => path('public').$file,
"contents" => $contents));
}
返回我的网页(从 Chrome 中的 js 控制台):
Object {file: "/var/www/sites/public/css/main.css", contents: null}
文件存在:
user@pc:~$ ls /var/www/sites/public/css/main.css
/var/www/sites/public/css/main.css
有内容:
user@pc:~$ wc -l /var/www/sites/public/css/main.css
441 /var/www/sites/public/css/main.css
并且该方法不会触发File::get() 中的$default 参数,如果文件不存在(使用其他有效和无效名称进行测试),它应该触发,因此它肯定找到了文件。
我已经在同一个 PHP 方法 (get_css())、其他目标目录和同一目录中尝试了其他文件,它返回这些文件的内容没有问题。
CSS文件的权限是ok的:
user@pc:~$ ls -hal /var/www/sites/public/css/main.css
-rw-r--r-- 1 www-data root 6.5K May 25 14:01 /var/www/sites/public/css/main.css
一个单独的PHP脚本,从命令行运行返回内容:
<?php
echo file_get_contents("/var/www/sites/public/css/main.css");
?>
这是main.css的前几行
user@pc:~$ head /var/www/sites/public/css/main.css
/* Estilos principais*/
body{
background-color:#c5c5c5;
font-family:sans-serif;
font-size:1.5em;
color:#999;
text-align:center;
margin:0;
这是一个错误吗?它不喜欢 CSS 文件的内容是否有任何原因(我现在看不到)?
【问题讨论】:
-
File::get()是一个非常简单的 1 行函数...return (file_exists($path)) ? file_get_contents($path) : value($default);你能确认 a)file_exists()单独工作,b)json_encode()与其他内容一起工作吗? -
这就是我不明白的...
json_encode()与其他内容一起使用(甚至来自同一目录中另一个 css 文件的内容),file_exists()也可以正常工作。该函数正在返回它认为是文件的内容。我将第二个参数传递给get()方法,所以它不应该只返回null。我现在认为问题出在file_get_contents(),但不知道为什么!