Я создал один процесс для чтения информации из файлов и сохранения в базу данных, все отлично работает в моей среде desenv, но когда я помещал файлы в свой php-хост (производственная среда), процесс прерывается при чтении файлов.
для выполнения моего процесса я создал одно задание cron на cpanel, с командой ниже:
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.
Во-первых, я поместил свои файлы кода в папку bacth в /home/
Во втором тесте я перемещаю файлы в папку ftp и помещаю в папку bacth (то же самое из моего кода).
В третьем тесте я переместил всю папку пакета (с кодами и txt файлами) в папку public_html.
Ничего не работает, всегда одна и та же ошибка, файл не существует.
Я попытался удалить ths file_exists, если, но произойдет erros на следующем шаге алгоритма.
Я проверял права доступа к файлам, и все разрешения в порядке.
Что я могу сделать???
Вы можете попробовать три вещи.
1 - chmod 777 (Дайте разрешение, чтобы php мог читать и записывать файлы)
2 - Я знаю, что практически невозможно, что ваш сервер имеет более низкую версию php. Scandir работает только php 5 выше. Поэтому вы можете проверить это.
3 - Там есть модуль под названием "mod_speling", попробуйте включить его.
;)
Похоже, что вы используете неверный разделитель пути для * nix.
Вы можете изменить свой код следующим образом:
$verifica = $this->sourceFilesFolder. "/". $file;
` path delimited usually used on windows instead of the
/`, обычно используемый в * nix? Кроме того, каково значение$verifica
перед проверкой его с помощьюfile_exists
? Вы убедились, что путь к файлу и имя файла, на которое указывает$verifica
действительно существуют?