логическое выражение?

edi

Новичок
логическое выражение?

есть скрипт show.php
там строки:
PHP:
$file = $HTTP_GET_VARS['file'] or $HTTP_POST_VARS['file'] or  "readme";
echo "file = $file";
при вызове его без параметров $file должен установиться в "readme", однако этого не происходит, а в логах сообщение:
PHP Notice: Undefined index: file in /var/htdocs/show.php on line 37

register_globals=on стоит
как с этим бороться? php 4.3.5
 

StUV

Rotaredom
при вызове его без параметров $file должен установиться в "readme"
с чего ты это взял ?

-~{}~ 29.04.04 09:05:

+ чего ты хочешь добиться ? =)

-~{}~ 29.04.04 09:07:

++ используй $_POST['file'] / $_GET['file'] вместо $HTTP_*_VARS

зы: нотайс вызван тем, что если передан $_GET['file'], то пост не определен, и наоборот
 

edi

Новичок
а ты проверь, должно получится.

раньше всегда пользовался подобной конструкцией, проблем не возникало.
пересел на систему поновее и что-то встало. Не пойму где и что не нравится.
 

StUV

Rotaredom
вообще должно получиться true или false =)))

тебе это надо:
PHP:
if (isset($_POST['file']))
  $file = $_POST['file'];
elseif (isset($_GET['file']))
  $file = $_GET['file'];
else
  $file = 'readme';
???

-~{}~ 29.04.04 09:14:

а ты проверь, должно получится
если бы это было так, мы бы с тобой сейчас не общались ;)
 

edi

Новичок
вот эта последовательность
$HTTP_GET_VARS['file'] or $HTTP_POST_VARS['file'] or "readme";
и заменяет многочисленные ифы.
покрайней мере раньше заменяла, пока апгрэйд не навел.
толи логика у пхп сменилась, толи в конфиге где косяк. :mad:
 

StUV

Rotaredom
edi
ты ничего не путаешь ?
мб ты имеешь ввиду оператор "?:" ?

зы: какая версия пхп была до обновления ?
 

edi

Новичок
была 4.3.1
нет, ничего не путаю.
незнаю как сейчас, а раньше отсутствие переменной, ее пустое или нулевое значение трактовалось как ложь.
посему из цепочки $a or $b or $c в качестве результата выдавалось первое истинное выражение
 

StUV

Rotaredom
специально нарыл у себя на компе ман к пхп версии ~4.0.x
так вот там описание работы операции or, а также ее приоритет относительно других операций (в частности - относительно операции присваивания), совершенно аналогичны соответствующим разделам последней версии мана.

зы: спор типа "было-небыло" все равно бесполезен
=> вывод: перепиши все заново...
 

Blindman

Новичок
edi
Похоже, все-таки путаешь.

1. Оператор присваивания имеет больший приоритет, чем or. Поэтому твой код эквивалентен просто
PHP:
$file = $HTTP_GET_VARS['file'];
2. При вычислении or операнды приводятся к логическому типу

А надо тебе вот это:
PHP:
$a= $x or $a = $y or  $a = "default";
 

Demiurg

Guest
Blindman
1 ты что то явно напутал.
2 в такой конструкции будут выдоваться нотисы.
 

StUV

Rotaredom
Demiurg
>> в такой конструкции будут выдоваться нотисы
не выдаются
 

StUV

Rotaredom
я знаю, что включены, но по такому случаю все-равно заглянул в пхп.ини =)))

м.б. я не так понял, о какой конструкции ты говоришь ?
я имел ввиду вот это (by Blindman):

$a= $x or $a = $y or $a = "default";

ессно, если $x есть $_POST['...'], а $y --- $_GET[...], то нотайсы будут (я сам об этом говорил в самом начале топика), но если это определенные переменные - тогда все ОК
 

Demiurg

Guest
>все-таки, что?
так, я торможу, сорри.

>какая конструкция имеется в виду?
$a= $x or $a = $y or $a = "default";
 
Сверху