我创建了一个从文件中读取信息并保存到数据库中的进程,在我的desenv环境中一切正常,但是当我将文件放入我的php主机(生产环境)时,读取文件时进程失败。
执行我的进程,我在cpanel上创建了一个cron作业,其命令如下:
php -q /home/<hostfolder>/batch/index.php
当我的进程由cron执行时,输出表示没有文件。我的代码的部分内容:
private $sourceFilesFolder = "/home/<host folder>/public_html/batch/arquivos";
private $destFilesFolder = "/home/<host folder>/public_html/batch/processados";
private $log;
private $trataException;
function __construct($log, $trataException) {
$this->log = $log;
$this->trataException = $trataException;
}
/**
* Read the source folder and select only files
* @return array - Array of valid files
*/
function selectFiles() {
// Save the first read of ftp folder
$listSourceFolder = scandir ( $this->sourceFilesFolder );
// Array tho save only valid files
$listFiles = array ();
// read the array with ftp content and save in listFiles only files
foreach ( $listSourceFolder as $file ) {
$verifica = $this->sourceFilesFolder . "\\" . $file;
// if is a file type, try save in listFiles array
if (($file != ".") && ($file != "..") && (!is_dir ( $verifica ))) {
// verifiy if the file exists
if (file_exists ( $verifica )) {
$this->log->gravaLog ( $file . " -> ADDED TO PROCESS" );
//verificaArquivoEmUso ( $verifica );
array_push ( $listFiles, $verifica );
} else
$this->log->gravaLog ( $file . "-> do not exist." );
} else
$this->log->gravaLog ( $file . "-> not is a file." );
}
return $listFiles;
}
在我的文件夹中,我有两个txt文件,它出现在$ listSourceFolder变量中,但是当我用file_exists检查这些文件时,总是返回false。
首先,我将我的代码文件放在/ home /
中的bacth文件夹中在第二次测试中,我将文件移动到ftp文件夹中并放入bacth文件夹(与我的代码相同)。
在第三次测试中,我将所有批处理文件夹(包含代码和txt文件)移动到了public_html文件夹。
没有任何作用,总是相同的错误,文件不存在。
我尝试删除了file_exists,但是在algoritm的下一步发生了错误。
我已经检查了文件权限,并且所有权限都可以。
我能做什么???
答案 0 :(得分:1)
你可以尝试三件事。
1 - chmod 777(授予权限,以便php可以读写文件)
2 - 我知道你的服务器几乎不可能有一个较低版本的PHP。 Scandir仅适用于上面的php 5。所以你可能想检查一下。
3 - 有一个名为“mod_speling”的模块,试试吧。
)
答案 1 :(得分:0)
您似乎正在使用* nix的错误路径分隔符。
您可以将代码更改为以下代码:
$verifica = $this->sourceFilesFolder . "/" . $file;