在批处理cpanel php中读取文件

时间:2015-08-12 00:41:19

标签: php batch-file cron cpanel

我创建了一个从文件中读取信息并保存到数据库中的进程,在我的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的下一步发生了错误。

我已经检查了文件权限,并且所有权限都可以。

我能做什么???

2 个答案:

答案 0 :(得分:1)

你可以尝试三件事。

1 - chmod 777(授予权限,以便php可以读写文件)

2 - 我知道你的服务器几乎不可能有一个较低版本的PHP。 Scandir仅适用于上面的php 5。所以你可能想检查一下。

3 - 有一个名为“mod_speling”的模块,试试吧。

答案 1 :(得分:0)

您似乎正在使用* nix的错误路径分隔符。

您可以将代码更改为以下代码:

$verifica = $this->sourceFilesFolder . "/" . $file;