2012-01-26 1 views
3

Я пытаюсь создать немного кода, чтобы сначала проверить содержимое каталога, чтобы увидеть, существует ли файл, и если это так, добавьте число к имени файла. К сожалению, я не могу заставить его работать на данный момент, php не производит ошибок, но новый файл не создается, если он уже существует. Вот мой код атм:Пока цикл, чтобы добавить 1 к имени файла, если он уже существует, не работает в PHP

$Scan_Name_Output = "dirbuster_" . $workload["Scan_Name"] . "_output.txt"; 
$Check_Output = exec("ls " . $Output_Directory . " | grep -w " . $Scan_Name_Output); 
$j = 1; 

while (!empty($Check_Output)) 
{ 
    $Scan_Name_Output = $Scan_Name_Output . $j; 
    $j++; 

Если я заменю время цикла с, если заявление, он работает - так что это не пути файл или что-нибудь, которые вызывают проблемы. Я пробовал несколько комбинаций, но не могу заставить его работать.

Я попытался использовать file_exists(), но это не сработало - я думаю, это потому, что я передаю ему переменные, которые были переданы через escapeshellarg(). В результате я думаю, что file_exists буквально ищет /path/to/dir/'Report1.txt '- очевидно, что Report1.txt не существует, Report1.txt. Вот почему я использовал exec и ls.

Спасибо за любые ответы

+0

Jingo, ты убедился, что это не создает ошибок, displa_errors обычно выключен быть по умолчанию. Попробуйте положить ini_set ('display_errors', 1); наверху вашего файла, чтобы убедиться, что нет ошибок. – AlexC

ответ

3

PHP имеет некоторые интересные функции, встроенные в обрабатывать файлы. Вы должны подумать об использовании file_exists(), например.

$basename = "dirbuster_" . $workload["Scan_Name"] . "_output.txt";   
$Scan_Name_Output = $basename; 
$j = 1; 
while (file_exists($Scan_Name_Output)){ 
    $Scan_Name_Output = $basename . $j; 
    $j++; 
} 
$ourFileHandle = fopen($Scan_Name_Output, 'w') or die("can't open file"); 
+0

Извините, что я должен был упомянуть в своем оригинальном посте, я отредактирую его, чтобы было ясно. Я пробовал file_exists(), но это не сработало - я думаю, это потому, что я передаю переменные, которые были перенесены через escapeshellarg(). В результате я думаю, что file_exists буквально ищет /path/to/dir/'Report1.txt '- очевидно, что Report1.txt не существует, Report1.txt. Вот почему я использовал exec и ls. Спасибо за ваш ответ, хотя! – Jingo

2

Попробуйте это:

$Scan_Name_Output = "dirbuster_" . $workload["Scan_Name"] . "_output.txt"; 
if (file_exists($Scan_Name_Output)) 
{ 
    rename($Scan_Name_Output, $Scan_Name_Output . "1"); 
} 
+0

Спасибо за ваш ответ, если вы видите мое последнее сообщение, вы увидите, почему file_exists, похоже, не работают для меня. Cheers – Jingo

+0

также не работает, если есть два файла name.txt report.txt и report.txt1 - он просто перезапишет файл report.txt1, так как нет счетчика, не так ли? – Jingo

+0

Почему бы не использовать trim(), чтобы удалить одинарные кавычки, прежде чем перейти к file_exists - вы можете сделать это: $ Scan_Name_Output = "dirbuster_". trim ($ workload ["Scan_Name"], "'"). "_output.txt"; – Ninja

Смежные вопросы