通过 sh bash 脚本 Centos 6 运行 PHP 脚本时未创建文件

通过 sh bash 脚本 Centos 6 运行 PHP 脚本时未创建文件

我有一个问题,为什么通过

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

相关内容