Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Почему не пишет в файл
Форумы портала PHP.SU » » Вопросы новичков » Почему не пишет в файл

Страниц (1): [1]
 

1. nordghost - 10 Февраля, 2012 - 13:48:29 - перейти к сообщению
Скрипт сервера:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. $addres= '192.168.168.136';
  4. $port=10001;
  5. $sock=socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  6. socket_bind($sock, $addres, $port);
  7. while(true){
  8. socket_listen($sock, 5);
  9. $msgsock=socket_accept($sock);
  10. $buf=socket_read($msgsock, 1024);
  11. $cli1=preg_match("~Com1(.*)Com1~Uis",$buf ,$info);
  12. $cli2=preg_match("~Com2(.*)Com2~Uis",$buf ,$info2);
  13. if($cli1==true){
  14. $ofile=fopen('logfiles\log1.txt', 'a');
  15. fwrite($ofile, $info[1]);
  16. fclose($ofile);
  17. }
  18. if($cli2==true){
  19. $ofile=fopen('logfiles\log2.txt', 'a');
  20. fwrite($ofile, $info2[1]);
  21. fclose($ofile);
  22. }
  23. }
  24. ?>


Клиент1:

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. <?PHP
  4. while(true){
  5. $memusage=file_get_contents("../../../proc/meminfo");
  6. preg_match_all("~([0-9]+)~m", $memusage, $memusagearr);
  7. $procusage=file_get_contents("../../../proc/loadavg");
  8. preg_match_all("~([0-9]+)~m", $procusage, $procusagearr);
  9. $disks=disk_total_space('../../../home');
  10. $diskfs=disk_free_space('../../../home');
  11. $disku=$disks-$diskfs;
  12. $disks=round(((($disks/1024)/1024)/1024))."Gb ";
  13. $diskfs=round(((($diskfs/1024)/1024)/1024))."Gb ";
  14. $disku=round(((($disku/1024)/1024)/1024))."Gb ";
  15. $memtot=round($memusagearr[1][0]/1024)."Mb ";
  16. $memus=round($memusagearr[1][5]/1024)."Mb ";
  17. $curtime=date("d-m-Y-H-i")." ";
  18. $procusg=$procusagearr[1][1]."%"."\n";
  19. $header="Com1";
  20. $allparam=array($header, $curtime, $disks, $diskfs, $disku, $memtot, $memus, $procusg, $header);
  21. $msg=implode("", $allparam);
  22. $addres='192.168.168.136';
  23. $port='10001';
  24. $socket=socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  25. socket_connect($socket, $addres, $port);
  26. socket_write($socket, $msg);
  27. socket_close($socket);
  28. sleep(30);
  29. }
  30.  
  31. ?>
  32.  
  33.  


Клиент 2:

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. <?PHP
  4. while(true){
  5. $memusage=file_get_contents("../../../proc/meminfo");
  6. preg_match_all("~([0-9]+)~m", $memusage, $memusagearr);
  7. $procusage=file_get_contents("../../../proc/loadavg");
  8. preg_match_all("~([0-9]+)~m", $procusage, $procusagearr);
  9. $disks=disk_total_space('../../../home');
  10. $diskfs=disk_free_space('../../../home');
  11. $disku=$disks-$diskfs;
  12. $disks=round(((($disks/1024)/1024)/1024))."Gb ";
  13. $diskfs=round(((($diskfs/1024)/1024)/1024))."Gb ";
  14. $disku=round(((($disku/1024)/1024)/1024))."Gb ";
  15. $memtot=round($memusagearr[1][0]/1024)."Mb ";
  16. $memus=round($memusagearr[1][5]/1024)."Mb ";
  17. $curtime=date("d-m-Y-H-i")." ";
  18. $procusg=$procusagearr[1][1]."%"."\n";
  19. $header="Com2";
  20. $allparam=array($header, $curtime, $disks, $diskfs, $disku, $memtot, $memus, $procusg, $header);
  21. $msg=implode("", $allparam);
  22. $addres='192.168.168.136';
  23. $port='10001';
  24. $socket=socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  25. socket_connect($socket, $addres, $port);
  26. socket_write($socket, $msg);
  27. socket_close($socket);
  28. sleep(30);
  29. }
  30.  
  31. ?>
  32.  
  33.  



Не пишет ничего ни в 1 из 2-х файлов
2. EuGen - 10 Февраля, 2012 - 13:53:19 - перейти к сообщению
nordghost пишет:
$cli1=preg_match("~Com1(.*)Com1~Uis",$buf ,$info);
$cli2=preg_match("~Com2(.*)Com2~Uis",$buf ,$info2);

А откуда берется $info и $info2? Подозреваю, что ниоткуда, стало быть они не совпадают по маске с тем, что обозначено в preg_match и потому ничего не записывается следую условию в if
3. nordghost - 10 Февраля, 2012 - 13:57:07 - перейти к сообщению
$info и $info2 создаются вывести их содержимое могу так

выводит без проблем
4. EuGen - 10 Февраля, 2012 - 13:58:38 - перейти к сообщению
nordghost
В Вашем скрипте сервера я не вижу где они определяются (выше строк с их использованием нет ничего, что указывало бы на их создание)
5. nordghost - 10 Февраля, 2012 - 14:02:55 - перейти к сообщению
хм..... ну а как мне тогда её определить чтоб в не же занести данные с компьютера 1 и компьютера2, я думал прег матч создаст её или что...
6. EuGen - 10 Февраля, 2012 - 14:10:54 - перейти к сообщению
Откуда он ее создаст?
В скрипте клиента указывайте примерно так: (модифицирую Ваш код, без оптимизаций)
PHP:
скопировать код в буфер обмена
  1. $msg='Computer1:::'.implode("", $allparam);

- для первого клиента
PHP:
скопировать код в буфер обмена
  1. $msg='Computer2:::'.implode("", $allparam);

- для второго клиента
В скрипте сервера:
PHP:
скопировать код в буфер обмена
  1. $rgBuf=explode(':::', socket_read($msgsock, 1024));
  2. $buf=$rgBuf[1];
  3. $sClient=$rgBuf[0];
  4. if($sClient=='Comuter1')
  5. {
  6.    $ofile=fopen('logfiles\log1.txt', 'a');
  7.    fwrite($ofile, $buf);
  8.    fclose($ofile);
  9. }
  10. elseif($sClient=='Comuter2')
  11. {
  12.    $ofile=fopen('logfiles\log2.txt', 'a');
  13.    fwrite($ofile, $buf);
  14.    fclose($ofile);
  15. }
7. Мелкий - 10 Февраля, 2012 - 14:16:22 - перейти к сообщению
Есть мнение, что стоит с socket_getpeername поиграться.
8. nordghost - 10 Февраля, 2012 - 14:17:16 - перейти к сообщению
ух есть что поразбирать, щас поработаю! спсибо надеюсь сработает! спасибо вам большое!
9. EuGen - 10 Февраля, 2012 - 14:25:53 - перейти к сообщению
Мелкий
Плохо тем, что если это действительно с одной машины несколько клиентов на один порт, то нужно знать удаленный порт, чтобы различить.
10. Мелкий - 10 Февраля, 2012 - 14:49:52 - перейти к сообщению
EuGen, так и не различить их будет с одной машины и знание порта клиента не поможет: ведь каждая следующая итерация клиента будет открывать новый порт. Однако и сам клиент не имеет различий в этом коде для одной машины.
11. EuGen - 10 Февраля, 2012 - 15:13:33 - перейти к сообщению
Мелкий
Имелось ввиду если клиентов оговоренное число и сервер знает порт (хотя и в этом случае есть привязка к одной TCP-сессии, согласен).
В общем, проще всего использовать преформатированную строку со служебными полями для однозначного определения клиента. Простейший пример я привел выше.
12. nordghost - 10 Февраля, 2012 - 18:22:42 - перейти к сообщению
Всё работает но возникла проблема, пишет не в папку logfiles а в файл которому даёт имя со слешом logfiles\log2.txt
13. Мелкий - 10 Февраля, 2012 - 20:19:39 - перейти к сообщению
Сервер тоже никсы, так понимаю? Директории отделяются /, а не \

 

Powered by ExBB FM 1.0 RC1