Ответы пользователя по тегу PHP
  • Подключение php файла вместо js как скрипт?

    NaN
    @NaN
    Требуется на самом деле часто много для чего. Например для своего сборщика скриптов, по сложности, отличного от хомпэйджных и лэндинговых проектов.
    Но все предложенные варианты плохи "дёрганием" php в любом случае.
    Лучше учите рерайты nginx.
    Привожу пример, как у меня работает сборщик scss/sass на php для конечного .css (тоже будет и для .js) каждого из шаблонов проекта:
    nginx:
    somehost.conf:
    location ~* ^/(.*)/styles/css/compiled/compile.css$ {
    		
    			set $nocache 'no';
    			
    			set $ccontrol "max-age=31536000";
    			
    			if ($arg_dev = 'yes'){
    
    				set $nocache 'yes';
    				
    				set $ccontrol "no-store,no-cache,must-revalidate";
    			
    			}	
      
    			add_header Cache-Control $ccontrol;
    			
    			if (!-f /home/dev/dev.test/$1/styles/css/compiled/compile.css){
    			
    				set $nocache 'yes';
    			
    			}
    			
    			if ($nocache = 'yes'){
    
    				rewrite ^(.*)(styles/css/compiled/compile.css)$ $1styles/css/virtual/compile.css;
    			
    			}
    			
    
    		
    			access_log off;
    			
    			log_not_found off;
    			
    			error_log off;
    			
    
    		
    		}
    		
    		location ~* ^/(.*)/styles/css/virtual/compile.css$ {
    		
    		
    			access_log off;
    			
    			log_not_found off;
    			
    			error_log off;
    		
    			proxy_pass http://unix:/var/run/scss.sock;
    			
    			proxy_store off;
    			
    	
    		}

    nginx:
    scss.conf:
    server {
    	
    	listen unix:/var/run/scss.sock;
    	
    	access_log off;
    	
    	error_log /var/log/nginx/less.error.log;
    	
    	root   /home/dev/dev.test; 
    	
    
    
    	location ~* ^/(.*)/styles/css/compiled/compile.css$ {
    		
    		alias  /home/dev/dev.test/$1/styles/css/compile.css;
    
    		access_log off;
    
    		log_not_found off;
    
    		error_log off;
    
    		expires max;
    
    	}
    	
    	#обратите внимание на путь /virtual/ которого нету. Именно на него "попадаем" из внешнего конфига в случае промаха по кэшу
    
    	location ~* ^/(.*)/styles/css/virtual/compile.css$ {
    			
    	
    	    fastcgi_pass backend_m;
    	    # это ваш php файл
                fastcgi_index /scsscompiler/csscompile.php; 
                include fastcgi_params;
                fastcgi_param   SCRIPT_FILENAME   $document_root/scsscompiler/csscompile.php;
                fastcgi_param   CSS_PATH          $1;
                fastcgi_param   CONTENT_TYPE      text/css;
    	
    	}	
    	
    	location ~ /\.ht {
    		deny all;
    	}
    }

    csscompiler.php
    обратите внимание на $_SERVER['CSS_PATH']. В неё передаем путь к файлам как fastcgi_param, у вас это может быть всё что угодно нужное.
    <?php 
    $pathroot = $_SERVER['DOCUMENT_ROOT'].'/'.$_SERVER['CSS_PATH'];
    
    if (is_dir($pathroot)){
    	
    	header('Content-Type: text/css');
    	
    	$files = [
    	//'../../styles/css/dropdown-enc.css'
    	];
    	
    	$sass = new Sass();
    	
    	$x = $sass->compile_file('../../styles/scss/_out.scss');
    	
    	
    	foreach($files as $file){
    		
    		if (file_exists($file)) $x .= PHP_EOL.file_get_contents($file);
    		
    	}
    
    	
    		$file = $pathroot.'/styles/css/compiled/compile.css';
    
    		$dir = $pathroot.'/styles/css/compiled';
    
    		if (!is_dir($dir)) mkdir($dir,0755,true);
    
    		file_put_contents($file,$x);
    		
    		$time = filemtime($file);
    
    		$etag = dechex($time).'-'.dechex(filesize($file));
    
    		header('ETag:"'.$etag.'"');
    	
    
    	
    	header('Last-Modified:'.gmdate('D, d M Y H:i:s', $time).' GMT');
    
    	echo $x;
    
    } else {
    	
    
    	header('Content-Type: text/css');
    	
    	echo '/* SASS CSS ERROR: no dir at: ',$pathroot,' */';
    	
    } 
    
    ?>

    Т.е. теперь при первом запросе отрабатывает 1 раз php, далее, если нет изменений и нужно максимально кешировать статику, работает только nginx.
    $arg_dev в первом конфиге для отключения кеширования на время разработки.
    Ответ написан
    Комментировать
  • Nginx + php-fpm иногда долго отвечает, почему?

    NaN
    @NaN
    20-30 секунд?

    очень похоже на проблему повторного создания сессий :
    search:
    Предотвращение зависания скриптов из-за блокировки файла сессии
    Ответ написан
  • Как проверить нагрузку на сервер с помощью DDos?

    NaN
    @NaN
    Чтобы имитировать реальную ситуацию, с учетом канала, клиента, кешей, статики, https и прочего:
    loaddy.com (быстрей, проще)
    loadimpact.com
    Ответ написан
    Комментировать
  • Как увеличить php stack size (>8192)?

    NaN
    @NaN Автор вопроса
    Ребят!
    recursion_limit - это не размер стэка.
    php.net/manual/ru/pcre.configuration.php
    ---
    Решение пока такое:
    у Элбек Азимов: на Debian
    limits.conf
    * - stack -1
    @* - stack -1
    &
    добавьте в конце файла /etc/pam.d/common-session
    session required pam_limits.so
    ----

    У меня: Ubuntu 14.04 Lts 64 minimal
    через /etc/init.d/php5-fpm
    Закомментировал секцию if init_is_upstart;
    Добавил в do_start()
    ulimit -s unlimited
    удалил старый update-rc.d -f php5-fpm remove
    удалил /etc/init/php5-fpm.conf
    обновил update-rc.d php5-fpm defaults
    Ответ написан
    1 комментарий
  • Как проверить нагрузку на сервер?

    NaN
    @NaN
    loaddy.com
    loadimpact.com

    синтетика не ок. Лучше "приближенными к реальности" инструментами проверять
    Ответ написан
    Комментировать
  • Php5-fpm + nginx + Xdebug. 502 bad gateway?

    NaN
    @NaN Автор вопроса
    более ранняя версия нас спасла. вместо 2.1.3 — 2.1.0
    Ответ написан
    Комментировать
  • Php5-fpm + nginx + Xdebug. 502 bad gateway?

    NaN
    @NaN Автор вопроса
    exception в журнале IDE
    java.net.SocketException: Software caused connection abort: socket write error
    java.net.SocketOutputStream
    socketWrite0
    ${java.home}lib/rt.jar

    java.net.SocketOutputStream
    socketWrite
    ${java.home}lib/rt.jar

    java.net.SocketOutputStream
    write
    ${java.home}lib/rt.jar

    org.netbeans.modules.php.dbgp.packets.DbgpCommand
    send
    90
    ${netBeansDir}modules/org-netbeans-modules-php-dbgp.jar

    org.netbeans.modules.php.dbgp.DebugSession
    sendCommands
    211
    ${netBeansDir}modules/org-netbeans-modules-php-dbgp.jar

    org.netbeans.modules.php.dbgp.DebugSession
    run
    143
    ${netBeansDir}modules/org-netbeans-modules-php-dbgp.jar

    java.util.concurrent.Executors$RunnableAdapter
    call
    ${java.home}lib/rt.jar

    java.util.concurrent.FutureTask$Sync
    innerRun
    ${java.home}lib/rt.jar

    java.util.concurrent.FutureTask
    run
    ${java.home}lib/rt.jar

    java.util.concurrent.ThreadPoolExecutor
    runWorker
    ${java.home}lib/rt.jar

    java.util.concurrent.ThreadPoolExecutor$Worker
    run
    ${java.home}lib/rt.jar

    java.lang.Thread
    run
    ${java.home}lib/rt.jar

    Ответ написан
    Комментировать
  • Php5-fpm + nginx + Xdebug. 502 bad gateway?

    NaN
    @NaN Автор вопроса
    во время ошибки вот такие вещи происходят:
    php5-fpm.log:
    WARNING: [pool www] child 14720 exited on signal 11
    syslog
    devsrv01 kernel: [365144.212259] php5-fpm[14720]: segfault at 42 ip 00000000006d0bd8 sp 00007fff32075080 error 4 in php5-fpm[400000+79e000]
    /nginx/error.log
    [error] 11572#0: *2063 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: XXX.XXX.XXX.XXX, server: example.com, request: «GET /index.php?XDEBUG_SESSION_START=NETBEANS-XDEBUG HTTP/1.1», upstream: «fastcgi://unix:/var/run/php-fpm.sock:», host: «www.example.com»
    Ответ написан
    Комментировать
  • Php5-fpm + nginx + Xdebug. 502 bad gateway?

    NaN
    @NaN Автор вопроса
    По умолчанию php-fpm слушает тот же порт что и xdebug
    у меня слушает сокет. конфликтов на порт нету.
    xdedug выставил вообще в отличный порт — 9900 вместо 9000.
    пробовал и так и так.
    1) php работает через socket. Переключение на tcp не помогает.с

    попробую конечно поиграться с размерами и количеством буферов, но что-то боюсь тут совсем не в этом дело.
    расширения php пробовал отключать. тоже толку 0.
    интересная фигня ваще… если внутри одного скрипта дебажить — норм. если бегать по инклюдам/брэкпойнтам — начинается эта свистопляска с сокет еррор и 502
    Ответ написан
    Комментировать
  • Php5-fpm + nginx + Xdebug. 502 bad gateway?

    NaN
    @NaN Автор вопроса
    2012/03/02 17:55:41 [error] 4523#0: *1 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.1.10, server:example.ru, request: «GET /index.php?XDEBUG_SESSION_START=netbeans-xdebug HTTP/1.1», upstream: «fastcgi://unix:/tmp/php-fpm.sock:», host: «www.example.ru»
    2012/03/02 17:59:52 [error] 4594#0: *1 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.1.10, server: example.ru, request: «GET /index.php?XDEBUG_SESSION_START=netbeans-xdebug HTTP/1.1», upstream: «fastcgi://unix:/tmp/php-fpm.sock:», host: «www.example.ru»
    Ответ написан
  • Php5-fpm + nginx + Xdebug. 502 bad gateway?

    NaN
    @NaN Автор вопроса
    к сожалению, не помогло(((

    fastcgi_buffer_size 16k;
    fastcgi_buffers 4 16k;

    ничего не дало.
    Ответ написан
    Комментировать