Problem so SafeStream

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
westrem
Člen | 398
+
0
-

Zdravim,

mam mensi problem tykajuci sa SafeStream-u.

Pri pokuse zapisat nieco do suboru pomocou funkcie file_put_contents mi PHP hlasi chybu, ze SafeStream::stream_open zlyhalo.

Cela hlaska chyby je tu:

Warning: file_put_contents(safe:///absolutna/cesta/k/suboru) [function.file-put-contents]: failed to open stream: „SafeStream::stream_open“ call failed

Neviete niekto, kde by mohol byt problem?

Pre istotu dodam, ze pouzivam SafeStream triedu separatne v jednom malom projekte (tzn nie vo vnutri Nette), kedze sa da oddelit a pouzit ako samostatny wrapper.

Za akekolvek napady // riesenia vopred dakujem

Tomik
Nette Evangelist | 485
+
0
-

Zkus ukázat nějaký kód, kde ti to havaruje.

westrem
Člen | 398
+
0
-

Tak veci s filesystemom mam v separatnej classe pFileSystem

<?php

//loading SafeStream wrapper from nette framework
require_once DEFS_DIR.'/class.nette.SafeStream.php';

//registering safestream safe://
SafeStream::register();

class pFileSystem extends pObject {

	/**
	 * Protocol prefix
	 *
	 */
	const PROTOCOL = 'safe://';

	static public function putToFile($file, $toPut) {
		return file_put_contents(self::PROTOCOL.$file, $toPut);
	}

// ... pokracovanie class

}

?>

Chybu hlasi presne na tom riadku kde je file_put_contents.

Zaujimave vsak je, ze na niektorzch hostingoch (napr u websupport-u) vsetko funguje okej, no niekde nie ..

norbe
Backer | 405
+
0
-

westrem napsal(a):
Warning: file_put_contents(safe:///absolutna/cesta/k/suboru) [function.file-put-contents]: failed to open stream: „SafeStream::stream_open“ call failed

Neviete niekto, kde by mohol byt problem?

Řekl bych, že by chyba mohla být v té cestě. Máš tam 3 lomítka, zkus jedno smazat (safe:///absolutna/cesta/k/suboru upravit na safe://absolutna/cesta/k/suboru)…

westrem
Člen | 398
+
0
-

norbe napsal(a):

westrem napsal(a):
Warning: file_put_contents(safe:///absolutna/cesta/k/suboru) [function.file-put-contents]: failed to open stream: „SafeStream::stream_open“ call failed

Neviete niekto, kde by mohol byt problem?

Řekl bych, že by chyba mohla být v té cestě. Máš tam 3 lomítka, zkus jedno smazat (safe:///absolutna/cesta/k/suboru upravit na safe://absolutna/cesta/k/suboru)…

Nie nie, tri lomitka su v poriadku – potom by to totiz nebola absolutna cesta

Dve lomitka patria k streamu (http://, ftp://, safe:// …) a to tretie je zaciatok absolutnej cesty na unix/like systemoch.

Ako vravim niekde to ide niekde nie, problem by skorej mohol byt v povahe streamov v PHP. Z nejakeho dovodu totiz sa stream pomocou stream_open neotvori. Vie niekto o nejakom nastaveni PHP, ktore by s tymto malo nieco docinenia?

David Grudl
Nette Core | 8228
+
0
-

A tohle jde?

$ss = new SafeStream;
$ss->stream_open($file);
westrem
Člen | 398
+
0
-

Nie, uvedeny kod nefunguje a hodi nasledovne warnings a notice:

Warning:  Missing argument 2 for SafeStream::stream_open(), called in /some/path/page.index.php on line 24 and defined in /some/path/class.nette.SafeStream.php on line 90

Warning:  Missing argument 3 for SafeStream::stream_open(), called in /some/path/page.index.php on line 24 and defined in /some/path/class.nette.SafeStream.php on line 90

Warning:  Missing argument 4 for SafeStream::stream_open(), called in /some/path/page.index.php on line 24 and defined in /some/path/class.nette.SafeStream.php on line 90

Notice:  Undefined variable: mode in /some/path/class.nette.SafeStream.php on line 94

Notice:  Undefined variable: mode in /some/path/class.nette.SafeStream.php on line 95

Notice:  Undefined variable: options in /some/path/class.nette.SafeStream.php on line 96

Warning:  Unsupported mode  in /some/path/class.nette.SafeStream.php on line 161
David Grudl
Nette Core | 8228
+
0
-

No jasně, tam je potřeba uvést další argumenty $ss->stream_open($file, 'w', NULL, $foo). Nicméně funkce se volá, netuším, proč to se safe stream nejede…

Vizi
Člen | 1
+
0
-

Vzhledem k tomu, že SafeStream je lokální stream, pak absolutní cesta v rámci projektu nezačíná lomítkem, alespoň u mě byl problém v tomhle.