Задать вопрос

Подключение php файла вместо js как скрипт?

Знаю, что так можно. Но везде ли работает?
<script src="js/script.php"></script>
  • Вопрос задан
  • 1467 просмотров
Подписаться 5 Оценить Комментировать
Решения вопроса 2
BuriK666
@BuriK666
Компьютерный псих
в script.php добавьте
header('Content-Type: text/javascript');
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
Главное, чтобы заголовки были правильные
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
<script language="php"> </script>- это устаревший способ написания тегов php. Вместо<?php ?> писать так можно было. В седьмой версии окончательно удалят https://wiki.php.net/rfc/remove_alternative_php_tags Работает или нет, зависит судя по всему от настроек интерпретатора (включены ли альтернативные теги или нет), лучше не использовать.
Ответ написан
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 в первом конфиге для отключения кеширования на время разработки.
Ответ написан
Комментировать
@Sashjkeee
f-e
А для чего так делать? Вопрос интереса ради.
Ответ написан
Комментировать
@korotkin
А чем ajax не понравился? Пересмотрите архитектуру.
Как вариант, код в студию.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы