Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Не открывает file();, если в имени '
 
 автор: Maxam   (17.08.2008 в 22:02)   письмо автору
 
 

Не открывает file();, если в имени '.
Warning: file(./Lunnqj_kamen%27.txt) [function.file]: failed to open stream: No such file or directory in ....php on line 10

Как исправить? Спасибо!

  Ответить  
 
 автор: Unknown   (17.08.2008 в 22:12)   письмо автору
 
   для: Maxam   (17.08.2008 в 22:02)
 


<?php
$file 
=  file("file'.txt");
?>


Так
file("file" . chr(27) . ".txt");
почему-то ошибку выдает.

  Ответить  
 
 автор: Trianon   (17.08.2008 в 22:15)   письмо автору
 
   для: Unknown   (17.08.2008 в 22:12)
 

27 hex = 39 dec

  Ответить  
 
 автор: Maxam   (17.08.2008 в 22:17)   письмо автору
 
   для: Unknown   (17.08.2008 в 22:12)
 

Всё равно, теперь ещё пишет знак:
.../Lunnqj_kamen%27.txt) [function.file]:

  Ответить  
 
 автор: sl1p   (17.08.2008 в 23:07)   письмо автору
 
   для: Maxam   (17.08.2008 в 22:17)
 

а можно както код увидеть?

  Ответить  
 
 автор: Maxam   (18.08.2008 в 00:24)   письмо автору
 
   для: sl1p   (17.08.2008 в 23:07)
 

$ReadingRoom = './ReadingRoom/Description/';
$ReadingRoomText = $ReadingRoom.''.$QUERY_STRING.''.chr(27).'.txt';
$FileReadingRoom = file ( $ReadingRoomText );


В этом случае:
$QUERY_STRING = Lunnqj_kamen'

Т.к. в строке браузера:
http://site.ru/page.php?Lunnqj_kamen'

  Ответить  
 
 автор: Shorr Kan   (18.08.2008 в 00:42)   письмо автору
 
   для: Maxam   (18.08.2008 в 00:24)
 

А слэшик перед апострофом поставить?...

  Ответить  
 
 автор: sl1p   (18.08.2008 в 00:50)   письмо автору
 
   для: Shorr Kan   (18.08.2008 в 00:42)
 

слэшик юзается когда текс в двойных кавычках, единичные его воспринимают за символ.

  Ответить  
 
 автор: sl1p   (18.08.2008 в 00:47)   письмо автору
 
   для: Maxam   (18.08.2008 в 00:24)
 

тю так замени единичные кавычки на двойные.

$ReadingRoom = "./ReadingRoom/Description/";
$ReadingRoomText = $ReadingRoom.$QUERY_STRING.".txt";
$FileReadingRoom = file ( $ReadingRoomText );

  Ответить  
 
 автор: Maxam   (18.08.2008 в 00:54)   письмо автору
 
   для: sl1p   (18.08.2008 в 00:47)
 

Заменял - не выходит!

  Ответить  
 
 автор: sl1p   (18.08.2008 в 01:08)   письмо автору
 
   для: Maxam   (18.08.2008 в 00:54)
 

странно, только что у себя протестил, всё ок=\

  Ответить  
 
 автор: BinLaden   (18.08.2008 в 01:34)   письмо автору
 
   для: Maxam   (18.08.2008 в 00:24)
 

Вы бы убрали chr(27) (это не 0x27, выше уже говорили) и не использовали так строку запроса - у нее другой формат: параметр=URL-кодированное_значение. Соответственно не надо говорить "тут так, так как в адресной строке так" - значения могут отличаться. Выведете значение, которое пытаетесь пихнуть бедной функции.

  Ответить  
 
 автор: Maxam   (18.08.2008 в 10:38)   письмо автору
 
   для: BinLaden   (18.08.2008 в 01:34)
 

Простите, не понял (

  Ответить  
 
 автор: Trianon   (18.08.2008 в 10:48)   письмо автору
 
   для: Maxam   (18.08.2008 в 10:38)
 

почему Вы написали chr(27) ?
chr(27) - это управляющий код ESC, а вовсе даже не апостроф.

  Ответить  
 
 автор: Maxam   (18.08.2008 в 10:50)   письмо автору
 
   для: Trianon   (18.08.2008 в 10:48)
 

Мне посоветовали. Я же говорю. Я вообще не знаю как всё решить тут.

  Ответить  
 
 автор: Maxam   (18.08.2008 в 10:59)   письмо автору
 
   для: Maxam   (18.08.2008 в 10:50)
 

Дело в том, что когда пишу так:
$File = file ( '../../../dir/dir/dir/dir/Lunnqj_kamen\'k.txt' );

всё работает!

Когда:
$per = '../../../dir/dir/dir/dir/';
$File = file ( '.$per.''.$QUERY_STRING.'.txt' );

а значение $QUERY_STRING берётся из адреса:
getenv ( 'QUERY_STRING' )

и равное:
Lunnqj_kamen'k

не работает!

  Ответить  
 
 автор: Trianon   (18.08.2008 в 11:04)   письмо автору
 
   для: Maxam   (18.08.2008 в 10:59)
 

попробуйте-ка напечатать echo bin2hex($QUERY_STRING); чтобы выяснить, что же у Вас там действительно лежит. И показать здесь.

  Ответить  
 
 автор: Maxam   (18.08.2008 в 11:13)   письмо автору
 
   для: Trianon   (18.08.2008 в 11:04)
 

4c756e6e716a5f6b616d656e2532326b

  Ответить  
 
 автор: Trianon   (18.08.2008 в 11:20)   письмо автору
 
   для: Maxam   (18.08.2008 в 11:13)
 

А теперь ответьте мне честно на два вопроса.

1) Зачем врать, что у Вас в $QUERY_STRING лежит Lunnqj_kamen'k в то время как на самом деле там лежит Lunnqj_kamen%22k ?

2) Откуда вообще взялась эта ссылка, по которой Вы вызываете скрипт?
Судя по тому, что в названии файла у Вас апостроф, а не кавычка, эта ссылка некорректна.

  Ответить  
 
 автор: Maxam   (18.08.2008 в 11:24)   письмо автору
 
   для: Trianon   (18.08.2008 в 11:20)
 

Я вывожу сначала список всех файлов, которые есть в заданной /dir/ и формирую ссылку, вида
<a href="./page.php?имя_файла_translit">имя_файла_rus</a>

И потом, если $QUERY_STRING не пустое, то читаю файл.

  Ответить  
 
 автор: Trianon   (18.08.2008 в 11:34)   письмо автору
 
   для: Maxam   (18.08.2008 в 11:24)
 

Выходит, ссылку формируете неверно.
Нужно пользоваться rawurlencode() при формировани ссылки,
и rawurldecode - при получении имени.
Тогда у Вас врядли бы внезапно апостроф превратился в кавычку.

  Ответить  
 
 автор: Maxam   (18.08.2008 в 11:47)   письмо автору
 
   для: Trianon   (18.08.2008 в 11:34)
 

Как использовать rawurlencode()?

  Ответить  
 
 автор: Trianon   (18.08.2008 в 11:54)   письмо автору
 
   для: Maxam   (18.08.2008 в 11:47)
 

http://php.net/rawurlencode

Как Вы формировали ссылку?
Живого кода я так и не увидел.

  Ответить  
 
 автор: Maxam   (18.08.2008 в 11:59)   письмо автору
 
   для: Trianon   (18.08.2008 в 11:54)
 

Спасибо. Попробую разобраться.

  Ответить  
 
 автор: Maxam   (18.08.2008 в 11:34)   письмо автору
 
   для: Trianon   (18.08.2008 в 11:04)
 

Помогло:
$QUERY_STRING = str_replace ( "%27" , "'" , $QUERY_STRING );

Но может есть лучший вариант?

  Ответить  
 
 автор: BinLaden   (18.08.2008 в 12:10)   письмо автору
 
   для: Maxam   (18.08.2008 в 11:34)
 

> Но может есть лучший вариант?

rawurldecode()

  Ответить  
 
 автор: Unknown   (25.12.2009 в 22:19)   письмо автору
 
   для: BinLaden   (18.08.2008 в 12:10)
 

test

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования