Forum poświęcone PHP
Mam taki kod: class A { }; class B : public A { }; Czy da się zrobić tak, aby w programie nie można było utworzyć obiektu klasy A?
Sun,04 Jan 2009 01:42:01 +0100
witam mam banalny problem ale jakos nie potrafie sobie z nim poradzic [glowa] [wstyd] chodzi o to, ze w programie mam wyszukiwanie w czasie rzeczywistym: jak tylko zaczynam cos wpisywac do edita to wyszukiwane sa odp rzeczy. problem w tym, ze jesli wyszukiwanie trwa a ja cos zmienie w edicie to wyszukiwanie ma zostac przerwane a nast rozpoczete na nowo. no i wlasnie z tym mam problem, z zatrzymaniem i jednoczesnym rozpoczeciem nowego. help [glowa] dzieki z gory
Sun,04 Jan 2009 01:23:45 +0100
Witam :) Chciałbym prosić o pomoc w rozpracowaniu kodu programu. Jest to saper napisany poprzez tablice dwuwymiarowe, których wartości ja zdefiniowane globalnie. Program znalazłem w zwykłym C i przerobiłem go na polskie określenia oraz na język c++. Powyrzucałem też nieco zbędnych linijek kodów zastępując łatwiejszymi rozwiązaniami oraz wprowadziłem generator losowych bomb ;) Generalnie rzecz biorąc rozumiem co nieco funkcji, ale chciałbym się upewnić co do moich domysłów. #include "stdafx.h" #include #include #include #include using namespace std; const int lw=7; const int lk=7; const int lb=1; int tab_bomb[lw][lk]; int tab_krycie[lw][lk]; int otoczenie_bomb[lw][lk]; int pozostale_pola; int Zaleznosc(int wiersz, int kolumna) //do sprawdzenia poprawnosci wprowadzonych wspolrzednych { return wiersz>=0 && wiersz=0 && kolumna
Sun,04 Jan 2009 01:14:49 +0100
Mam mały problem, tworzę dynamicznie tablice dwuwymiarowa char i chcę do niej wpisywać wyrazy gdzie w każdym wierszu będzie inny, a gdy wcisnę 0 to się wpisywanie zakończy. Ilości wyrazów jakie zostaną wpisane do tablicy nie znam więc używam zmiennej ilosc_wyrazow jako licznika ich. I mój problem jest następujący nie wiem gdzie wsadzić licznik wyrazów aby je zliczał oraz aby dobrze się tekst kopiował do tablicy dwuwymiarowej z tablicy pomocniczej. #define DLUGOSC_WIERSZA 50 int ilosc_wyrazow = 1 ; char tab_pomocnicza[50] ; tablica = (char**)malloc(DLUGOSC_WIERSZA * sizeof(char*)); for(i = 0; i < DLUGOSC_WIERSZA; ++i) { tablica[i] = (char*)malloc(ilosc_wyrazow * sizeof(char)); scanf("%s", tab_pomocnicza) ; if(tab_pomocnicza[0] == '0') { break ; } strcpy(tablica[i], tab_pomocnicza) ; } Jak narazie doszedłem do tego i kod mi wybucha, w grę wchodzi tylko ANSI C
Sun,04 Jan 2009 01:12:31 +0100
Problem to pewnie wina złych pomysłów... Ale w skrócie, mam klasę bazową będącą teoretycznie robolem oraz klase niby interfejsu wyższego poziomu. Obie te klasy to szablony. Trudno opisać cały ten bałagan, w każdym razie kod przykładowy wygląda tak: template class BaseW { protected: T work(T a, T b) { /*tu żyją smoki*/}; public: BaseW(){/*tu składają jaja smoki*/}; ~BaseW(){/*tu giną smoki*/}; } template Class WHorse: private BaseW { protected: typedef T (BaseW::*wrk)(T,T); map workers; public: WHorse() { workers['a']=BaseW::work; //
Sun,04 Jan 2009 00:00:25 +0100
Rozdział 42. Tryb bezpieczny
Tryb bezpieczny (safe mode) jest próbą rozwiązania problemów bezpieczeństwa na współdzielnym serwerze. Co prawda rozwiązywanie ich na poziomie PHP nie jest najlepszym rozwiązaniem, ale jeśli nie ma możliwości zrobienia tego na poziomie serwera www lub systemu operacyjnego, na wielu serwerach, zwłaszcza u usługodawców internetowych, używa się trybu bezpiecznego.
Dyrektywy konfiguracyjne odpowiadające za tryb bezpieczny:
safe_mode = Off safe_mode_gid = 0 safe_mode_include_dir = safe_mode_exec_dir = open_basedir = safe_mode_allowed_env_vars = PHP_ safe_mode_protected_env_vars = LD_LIBRARY_PATH disable_functions = |
Gdy opcja safe_mode jest włączona, PHP sprawdza czy właścicielem pliku na którym na którym funkcja chce operować i właścicielem uruchamianego skryptu jest ten sam użytkownik. Na przykład:
-rw-rw-r-- 1 rasmus rasmus 33 Jul 1 19:20 script.php -rw-r--r-- 1 root root 1116 May 26 18:01 /etc/passwd |
<?php |
Warning: SAFE MODE Restriction in effect. The script whose uid is 500 is not allowed to access /etc/passwd owned by uid 0 in /docroot/script.php on line 2 |
Jeśli zamiast włączać opcję safe_mode ustawisz katalog open_basedir, wtedy wszystkie operacje plikowe bedą ograniczone do tego katalogu. Na przykład (dla httpd.conf Apache'a):
<Directory /docroot> php_admin_value open_basedir /docroot </Directory> |
Warning: open_basedir restriction in effect. File is in wrong directory in /docroot/script.php on line 2 |
Możesz także wyłączyć pojedyncze funkcje. Pamiętaj jednak, że dyrektywa disable_functions może być użyta tylko w pliku php.ini, co oznacza, że nie da się wyłączać funkcji w sekcjach VirtualHost i Directory w pliku httpd.conf. Jeśli do pliku php.ini dodasz:
disable_functions readfile,system |
Warning: readfile() has been disabled for security reasons in /docroot/script.php on line 2 |
Funkcje ograniczone/wyłączone w trybie bezpiecznym
Jest to najprawdopodobniej wciąż niekompletna lista funkcji ograniczonych przez tryb bezpieczny.
Tabela 42-1. Funkcje ograniczone w trybie bezpiecznym
| Funkcja | Ograniczenia |
|---|---|
| dbmopen() | Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. |
| dbase_open() | Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. |
| filepro() | Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. |
| filepro_rowcount() | Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. |
| filepro_retrieve() | Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. |
| ifx_*() | Podlega ograniczeniom narzuconym przez sql_safe_mode, (!= tryb bezpieczny) |
| ingres_*() | Podlega ograniczeniom narzuconym przez sql_safe_mode, (!= tryb bezpieczny) |
| mysql_*() | Podlega ograniczeniom narzuconym przez sql_safe_mode, (!= tryb bezpieczny) |
| pg_loimport() | Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. |
| posix_mkfifo() | Sprawdza, czy katalog, na którym ma być wykonywana operacja, ma takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. |
| putenv() | Podlega dyrektywom safe_mode_protected_env_vars i safe_mode_allowed_env_vars w php.ini. Zobacz również dokumantację do putenv() |
| move_uploaded_file() | Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. |
| chdir() | Sprawdza, czy katalog, na którym ma być wykonywana operacja, ma takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. |
| dl() | Ta funkcja jest niedostępna w trybie bezpiecznym |
| lewy apostrof | Ta funkcja jest niedostępna w trybie bezpiecznym |
| shell_exec() (funkcja równoważna z lewym apostrofem) | Ta funkcja jest niedostępna w trybie bezpiecznym |
| exec() | Możesz uruchamiać programy jedynie z katalogu zdefiniowanego dyrektywą safe_mode_exec_dir. Ze względów praktycznych obecnie nie ma możliwości stosowania .. w ścieżce do programu. |
| system() | Można uruchamiać programy jedynie z katalogu zdefiniowanego dyrektywą safe_mode_exec_dir. Ze względów praktycznych obecnie nie ma możliwości stosowania .. w ścieżce do programu. |
| passthru() | Można uruchamiać programy jedynie z katalogu zdefiniowanego dyrektywą safe_mode_exec_dir. Ze względów praktycznych obecnie nie ma możliwości stosowania .. w ścieżce do programu. |
| popen() | Można uruchamiać programy jedynie z katalogu zdefiniowanego dyrektywą safe_mode_exec_dir. Ze względów praktycznych obecnie nie ma możliwości stosowania .. w ścieżce do programu. |
| mkdir() | Sprawdza, czy katalog, na którym ma być wykonywana operacja, ma takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. |
| rmdir() | Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. |
| rename() | Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. Sprawdza, czy katalog, na którym ma być wykonywana operacja, ma takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. |
| unlink() | Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. Sprawdza, czy katalog, na którym ma być wykonywana operacja, ma takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. |
| copy() | Sprawdza czy pliki lub katalogi, na których będą
przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest
aktualnie wykonywany. Sprawdza, czy katalog, na którym ma być wykonywana
operacja, ma takie same UID (owner) jak skrypt, który jest aktualnie
wykonywany. (dla
źródła i
przeznaczenia) |
| chgrp() | Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. |
| chown() | Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. |
| chmod() | Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. Dodatkowo, nie można ustawić bitów SUID, SGID i sticky bit. |
| touch() | Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. Sprawdza, czy katalog, na którym ma być wykonywana operacja, ma takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. |
| symlink() | Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. Sprawdza, czy katalog, na którym ma być wykonywana operacja, ma takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. (sprawdzany jest jedynie element do którego tworzony jest link) |
| link() | Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. Sprawdza, czy katalog, na którym ma być wykonywana operacja, ma takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. (sprawdzany jest jedynie element do którego tworzony jest link) |
| getallheaders() | W tybie bezpiecznym, nagłowki zaczynające się od 'authorization' (wielkość liter bez znaczenia) nie będą zwracane. Uwaga: w implementacji dla serwera AOL ta funkcjonalność jest uszkodzona |
| Każda funkcja korzystająca z php4/main/fopen_wrappers.c | ?? |
| Poprzedni | Spis treści | Następny |
| Stałe połączenia z bazami danych | Początek rozdziału | Using PHP from the command line |