Редактировать: Первоначально я упростил исходный файл CSV (с com1_webscrapersolution_new_email-10-02-20.csv
до products.csv
), чтобы минимизировать / упростить вопрос, но оказалось, что имя файла имеет здесь значение и является ключом к решению. Я отредактировал вопрос таким образом, чтобы это стало очевидным. Я также добавил ответ без известного объяснения, которое, я надеюсь, кто-то другой может предоставить.
Для следующей проблемы я могу подтвердить, что
/folder/custom_csv_parsing_functions.php
существует, соответствующая выдержка показана ниже - / c1 / products.csv /c1/com1_webscrapersolution_new_email-10-02-20.csv существует и может быть просмотрена полностью здесь
Я запускаю PHP в bash как php -f file.php
.
file.php
:
<?php
include('/folder/custom_csv_parsing_functions.php');
$out = '/c1/com1_webscrapersolution_new_email-10-02-20.csv';
//ENCLOSE HD DQUOTE
$in = $out;
$out = str_replace('.csv','_enc_hd.csv',$in);
enclose_headers_dquote($in,$out);
выдает ошибку:
fopen (' / c1 / products.csv com1_webscrapersolution_new_email-10-02-20.csv'): не удалось открыть поток: нет такого файла или каталога в / folder / custom_csv_parsing_functions. php в строке 58
Выдержка из /folder/custom_csv_parsing_functions.php
:
//removed code here as this is an excerpt
function enclose_headers_dquote($csv_input_file, $csv_output_file){
$line = fgets(fopen($csv_input_file, 'r')); //this is line 58
$line = str_replace("\r\n", '', $line);
$arr = explode(',', $line);
$header = '"' . implode('","', $arr) . '"';
$header = array(
$header
);
$fulltext = file_get_contents($csv_input_file);
$fulltext = explode("\r\n", $fulltext);
array_shift($fulltext);
$reconstituted_csv_array = array_merge($header, $fulltext);
$reconstituted_csv_str = implode("\r\n", $reconstituted_csv_array);
file_put_contents($csv_output_file, $reconstituted_csv_str);
}
Если файл products.csv com1_webscrapersolution_new_email-10-02- 20.csv существует и имеет 777 разрешений, почему PHP сообщает "fopen (' / c1 / products.csv com1_webscrapersolution_new_email-10-02-20.csv'): f ailed to open stream: Нет такого файла или каталога "?
Далее я могу подтвердить, что запуск PHP непосредственно в bash интерактивной оболочке действительно успешен:
[root@server c1]# php -a
Interactive shell
php > include('/folder/custom_csv_parsing_functions.php');
php > enclose_headers_dquote('/c1/com1_webscrapersolution_new_email-10-02-20.csv','/c1/com1_webscrapersolution_new_email-10-02-20_enc_hd.csv');
Успешный вывод равен /c1/com1_webscrapersolution_new_email-10-02-20_enc_hd.csv
(можно посмотреть здесь ).
Так почему же он не работает при запуске PHP в bash как php -f file.php
?