我有一个问题,为什么通过
php -q -f /home/user/public_html/file.php(该脚本包含一个创建文件的小脚本)。
file.php内容:
$csvFile = 'http://example.com/file.csv';
function readCSV($csvFile){
$file_handle = fopen($csvFile, 'r');
while (!feof($file_handle) !== FALSE) {
$line_of_text[] = fgetcsv($file_handle, 1024);
}
fclose($file_handle);
return $line_of_text;
}
$csv = readCSV($csvFile);
$xml = new SimpleXMLElement('<data/>');
foreach ($csv as $_item){
$itm = $xml->addChild('produs');
$itm->addAttribute('city', $_item[0]);
$itm->addAttribute('street', $_item[2]);
$itm->addAttribute('number', $_item[3]);
$itm->addAttribute('user', '0');
}
$dom = new DOMDocument();
$dom->loadXML($xml->asXML());
$dom->formatOutput = true;
$formattedXML = $dom->saveXML();
$xmlFilePath = 'file.xml';
//i solved the issue with '/home/path/to/be/stored/'
$fp = fopen($xmlFilePath,'w+');
fwrite($fp, $formattedXML);
fclose($fp);
问题是,执行命令时不会创建文件,但通过 http 在网络上访问时会创建文件。
没有错误,只是说文件已创建但实际上并未创建。
Centos 6 - 最小服务器 Nginx,PHP-FPM。用户 www-data 和 root 都执行相同的操作。
任何帮助都将受到赞赏。
答案1
最有可能的是,这是一个权限问题,当通过 php-fpm 执行该过程时,它可以写入相关位置,但当由您的用户帐户运行时,该位置不可写。
要查看脚本发生情况的完整详细信息,请尝试在 strace 下运行它
strace php -q -f /home/user/public_html/file.php