Jump to content
  • 0

Что не так в скрипте?!


Zzz_
 Share

Question


<?php
function one(){
global $one;
$one = "a";
function two(){
global $one;
if(file_exists("./upload/$one.zip")){
$one = "_" . $one;
two();
}
}
two();
}
one();
echo $one;
?>

фухх, по моей логике:

функция one(); проверяет на присутствие файла а.zip в папке, если его нет, то функция выведет "а",а если он имеется то функция выведет "_a", но выводится "а" даже если файл существует

В чем ошибка?!

Edited by Zzz_
Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0

Это какой-то дикий ужас, а не код...

Какая цель преследуется в этом коде? Вернуть _a если имя файла существует?

function filename($file) {
return ( file_exists($file) ) ? "_a" : "a";
}

echo filename("swfobject_2_2.zip");

Edited by hedgehog
  • Like 1
Link to comment
Share on other sites

  • 0

Вообще мне нужно что бы скрипт, посмотрел сущесвует ли файл с таким именем если да,

то добавил префикс к началу имени "_name", и после того как он добавил префикс

посмотрел еще раз не существует ли "_name", если существует то опять добавил префикс, а если нет то продолжил работу

Link to comment
Share on other sites

  • 0

Вообще мне нужно что бы скрипт, посмотрел сущесвует ли файл с таким именем если да,

то добавил префикс к началу имени "_name", и после того как он добавил префикс

посмотрел еще раз не существует ли "_name", если существует то опять добавил префикс, а если нет то продолжил работу

Ну, за такой код здешние умельцы оторвут мне руки :)

function filename($file, $dir='') {
for ($i=0;$i<20;$i++) {
if ( file_exists($dir.$file) ) {
$file = "_" . $file;
} else {
return $file;
}
}
return false;
}

echo filename("a","./upload/");

Мне кажется, что лучше использовать дату + случайное число...

Edited by hedgehog
  • Like 1
Link to comment
Share on other sites

  • 0

Во-первых, не стоит писать код в столбик, как это делаете вы. Лучше примерно так: (ваш код)

function one(){
global $one;
$one = "a";
function two(){
global $one;
if(file_exists("./upload/$one.zip")){
$one = "_" . $one;
two();
}
}
two();
}
one();
echo $one;

Так просто понятнее.

Вызов внутренней ф-ии two из one напоминает какое-то замыкание, хотя его в пхп нет просто(и не надо собсно).

Строка: if(file_exists("./upload/$one.zip")){, в данном случае, ищет файл с название "$one.zip",но мы то знаем, что $one это переменная. Если переменная в кавычках, то ее интерпретируют как строку, надо использовать конкатенацию : "./upload/".$one.".zip" .

global используется не правильно почитать про область видимости . Достаточно так и мы уже будем видеть переменную в локальной области:


$one = 'a';
function two() {
global $one;
}

т.е ф-я обертка, в качестве one() не нужна.

Если изменить ваш код по моему вкусу:

<?php
$one = 'file_name';
function uglyName(){
global $one;
if(file_exists("./upload/".$one.".zip")){
$one = '_'.$one;
uglyName();
}else{
echo $one;
//блок кода если совпадений в имени не найдено.
}
}
uglyName();
?>

Но я вобщем-то не уверен, что он работает :blush: . Вы меня сегодня меня прям раскормили плюсами, так что ставить не надо.(ну так, на всякий случай, а то...)

Edited by moron
  • Like 1
Link to comment
Share on other sites

  • 0

hedgehog, ваш код как я понял сравнивает 20 раз и потом делает!?

Это мне не совсем подходит, но подход интересный - Спасибо!

moron:), заработало, только пока еще не понял почему мой код не работает... буду разбираться, Спасибо!

Link to comment
Share on other sites

  • 0

hedgehog, ваш код как я понял сравнивает 20 раз и потом делает!?

Это мне не совсем подходит, но подход интересный - Спасибо!

Нет, сравнивает максимум двадцать раз :) Во избежание бесконечных увеличений имени файла.

Все разобрался, помгите разобраться с глобальными переменными,

Как переменную находящуюся внутри дочерней функции сделать Глобальной!?

Вам не нужен глобал. Передавайте аргумент функции.

  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy