2016-06-28 6 views
0

На этом сервере я могу использовать файлы .cfm и .php. Оба типа будут анализироваться, как и ожидалось.Coldfusion и php, в том же файле?

Однако, я хочу, чтобы файлы .cfm обрабатывались для php, а также. Например,

//test.cfm: 
<cfoutput>hello from cf</cfoutput>  
<?php echo 'hello from php'; ?> 
// outputs the php, verbatim, without processing :(

Я знаю, что я могу изменить конфигурацию php для анализа .cfm. Я не знаю, в каком порядке будет происходить разбор или какие-либо другие плюсы и минусы, трюки и подсказки.

Целью здесь является то, что я хочу обернуть php (который я знаю хорошо) в файл cfm (гораздо меньше опыта). Файл cfm будет находиться в разделе администратора, который автоматически проверяет аутентификацию пользователя и включает другие cf-файлы.

Итак, мне кажется, что если coldfusion анализирует файл (проверяя user-auth и все такое), то передает его на php, это будет процесс, который я ищу.

+15

Я не» Думаю, это возможно или, по крайней мере, практично. Если вам нужно использовать оба языка, лучше всего выводить информацию с помощью PHP во что-то другое, с которым вы можете работать, например, запрос POST/GET или JSON, а затем обрабатывать эту информацию с CFML ... или наоборот. – TRose

+0

Я бы не смешивал CF с PHP. Более простой, быстрый и элегантный способ - использовать только один из этих языков в определенных областях вашего сайта. – PatNowak

+2

Это, вполне возможно, будет самым распространенным способом разработки веб-приложений Rube Goldberg-ish, который я когда-либо слышал. Было бы проще просто изучить ColdFusion. –

ответ

1

Это было сделано:

См: http://www.barneyb.com/barneyblog/projects/cfgroovy2/

Большая часть документации была смешением ColdFusion и Groovy, но и другие языки могут быть смешаны в тоже.

Пример кода:

<cfimport prefix="g" taglib="engine" /> 

... 

<h2>Run some PHP (via Quercus)</h2> 
<cftry> 
    <g:script lang="php"> 
     <?php 
     $variables["myArray"][] = "Pretty Happy People wrote PHP."; 
     echo "<pre>"; 
     var_dump($variables["myArray"]); 
     echo "</pre>"; 
     ?> 
    </g:script> 
    <cfcatch type="CFGroovy.UnknownLanguageException"> 
    <p>Quercus needs to be added to your classpath for the PHP example to work</p> 
    </cfcatch> 
    <cfcatch type="any"> 
    <p>Error running PHP code: #cfcatch.message#</p> 
    <p>#cfcatch.detail#</p> 
    </cfcatch> 
</cftry> 

Источник: https://ssl.barneyb.com/svn/barneyb/cfgroovy2/trunk/demo/index.cfm

0

Это будет зависеть от ColdFusion Application Server, что он поддерживает и какой уровень совместимости вы хотите. В общем случае, если вы хотите иметь возможность смешать переменные между операторами, тогда вам нужно разделить страницу ColdFusion pageContext и убедиться, что переменные php написаны и обновлены. Я не верю, что приведенный выше пример делает это, но я счастлив, что исправил ситуацию. Другой вариант - назвать ColdFusion от PHP, снова используя Quercus. Эти 2 статьи помогут вам в этом. Первый показывает, как вызвать Java из PHP, второй - как вызвать ColdFusion с Java.

http://quercus.caucho.com/quercus-3.1/doc/quercus.xtp#Instantiatingobjectsbyclassname http://help.adobe.com/en_US/ColdFusion/10.0/Developing/WSe61e35da8d318518-106e125d1353e804331-7ffb.html

Во-первых, создать компонент ColdFusion, который может оказать ColdFusion динамически

<cfcomponent displayname="ColdFusion renderer" output="false"> 
    <cffunction name="render" returntype="'String' or 'Any'"> 
    <!--- 
    Do something with the coldfusion code here e.g: 

    write to a file using <CFFILE> and then <CFMODULE> or <CFINCLUDE>,<CFSAVECONTENT> it 

    or if the ColdFusion is all script, use the evaluate() function 

    ---> 
    </cffunction> 
</cfcomponent> 

ВЫЗОВ компонент в PHP, с помощью Java, используя CFCProxy

<?php 
function cfml($code) 
{ 
    $cfc = new Java("coldfusion.cfc.CFCProxy", "path/to/cfc/above"); 
    $cfc.render($code); 
} 

echo 'hello from php'; 

cfml(<<<EOT 
    <cfoutput>Hello from CF</cfoutput> 
EOT 
); 
?> 
+0

Мне нужно иметь php * в * .cfm. Причина в том, что /admin/somefile.cfm запускает auth пользователя, который уже существует. Итак, если пользователю разрешено получать файл.cfm из каталога/admin, отлично, в противном случае пользователь будет перенаправлен на login.cfm. Эта инфраструктура уже находится на месте. Теперь, когда пользователь проверен для somefile.cfm, мне нужен php для его анализа. Мне не нужно делиться никакими переменными или что-то в этом роде.единственной причиной всего этого является копирование существующего пользовательского auth. –

+0

звучит как php в coldfusion с использованием подхода Quercus - лучшее решение –

Смежные вопросы