Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с файлами без файлов, возможно реализовать потоками? 
:(
    Опции темы
flashaa
Дата 11.3.2008, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 19
Всего: 25



Существует функция цифрового подписывания письма 
http://ru2.php.net/manual/ru/function.openssl-pkcs7-sign.php
Она требует входной текст в виде файла, а результат выбрасывает в виде результирующего файла.
Это очень не удобно - запись на диск, чтение с диска, когда эти операции мне совершенно не нужны. 
Возможно как-то сделать так, чтобы обойтись без файлов?
Например можно использовать стандартный поток как имя файла
Код

file_put_contents('php://stdout', 'asdasd');
 
Но я так и не разобрался как с этим работать. К примеру я могу работать с stdout как с файлом, используя
file_put_contents. Но если я теперь попытаюсь считать и stdin, то ничего не получу.
Код

$a = file_get_contents('php://stdin'); // Скрипт зависает

Вообщем хотелось бы найти такое решение, чтобы можно было обануть требование php к файлам - как чтение, так и вывод. С выводом вроде разобраться, а ввод - stdin - не поддается.
Ну и если можно подобрать функцию, аналогичную моей, но без требований к файлам - было бы вообще идеально.

Это сообщение отредактировал(а) flashaa - 11.3.2008, 16:51
PM MAIL   Вверх
Canarat
Дата 11.3.2008, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 11.3.2008
Где: Каспий

Репутация: 5
Всего: 5



Цитата

Allows Reading    php://stdin, php://input, php://memory and php://temp only.
Allows Writing    php://stdout, php://stderr, php://output, php://memory and php://temp only.

© http://de3.php.net/wrappers.php

Т.е. из php://stdin можно только читать, а file_put_contents пишет туда. Если нужен один поток для обеих операций - тогда php://temp использовать можно.

PM MAIL   Вверх
flashaa
Дата 11.3.2008, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 19
Всего: 25



Я ошибся опять по невнимательности, вообще про то что из одного только читаем, в другой только пишем я знаю.
Вот я и пытаюсь сначала кинуть в какой-нибудь поток, затем считать.
Код

file_put_contents('php://stdout', 'asdasd'); // Выводит текст в консоль
$a = file_get_contents('php://stdin'); // Пытается считать из потока

Сейчас уже могу считать из STDIN, проблема в том, что он считывает все, что пользователь введет в консоль, при этом не замечает предыдущий вывод 'asdasd'. 
А вот пытаюсь с php://temp работать. Подскажи, что не так?
Код

file_put_contents('php://temp', 'asdasd');
$c = file_get_contents('php://temp');

var_dump($c);

$c получается пустой строкой.
PM MAIL   Вверх
flashaa
Дата 11.3.2008, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 19
Всего: 25



Нашел наиболее подходящий поток:
Код

$one = 'data://,'. $txt;
echo file_get_contents($one); // Выводит содержимое $txt

Но ф-ция отказывается с ним работать. :(
PM MAIL   Вверх
Canarat
Дата 11.3.2008, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 11.3.2008
Где: Каспий

Репутация: 5
Всего: 5



flashaa, видимо потому, что открытие файла в самой библиотеке openssl происходит через стандартные C функции, а не PHP API. Т.е. никаким образом функция не воспримет потоки, определенные в PHP
PM MAIL   Вверх
flashaa
Дата 11.3.2008, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 19
Всего: 25



Canarat, cпасибо, жаль что так. 
PM MAIL   Вверх
Fortop
Дата 11.3.2008, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(flashaa @  11.3.2008,  17:09 Найти цитируемый пост)
А вот пытаюсь с php://temp работать. Подскажи, что не так?

надо так

Код

    $fp = fopen("php://temp/", 'r+');
    $line = 'aasfdklasdhfkjdsflkghlsf sg kjlhsdlkg hldsfjkg';
    fputs($fp, $line);
    rewind($fp);
    echo stream_get_contents($fp);
    fclose($fp);



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
flashaa
Дата 12.3.2008, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 19
Всего: 25



Fortop, спасибо за пояснение, буду знать. Но все же в привязке к исходной задаче, мне надо передать в функцию строковый адрес к файлу.
А уже имеющийся файловый дескриптор для работы функции бесполезен :(

Это сообщение отредактировал(а) flashaa - 12.3.2008, 10:23
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0548 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.