Моя нормальная платформа для разработки на PHP - Linux. Я использую сервер Red Hat для своего сайта, моя компания использует Red Hat и Fedora для производства, и у меня дома есть Ubuntu. Я не мог быть счастливее. К сожалению, теперь я должен уделять много времени работе на PHP в Windows, используя WAMP.
Я говорю, что это прискорбно, потому что я постоянно нахожу вещи, которые поддерживает Linux, а Windows - нет. В прошлом году он фактически задержал проект, когда мы поняли, что WAMP использовал более раннюю версию PHP (это было исправлено портом 5.3 для Windows). Сегодня я только что узнал, что checkdnsrr
не портирован на Windows, и вся библиотека pcntl
недоступна.
Итак, мои вопросы таковы: Есть ли где-нибудь, что говорит мне о текущих различиях между Windows и Linux относительно PHP?
Я не ищу идиосинкразии, такие как те, которые можно найти в комментариях здесь (хотя это было бы неплохо), но скорее, какие функции не будут доступны в Windows, которые доступны в Linux.
----------------------- РЕДАКТИРОВАТЬ ----------------------- -
Было два комментария / утверждения, в которых говорится, что checkdnsrr
существует в 5.3 под Windows. Технически это правильно. PHP не скажет, что функция не существует. Я не знаю, так ли это для всех установок или только для WAMP, но, хотя да, можно сказать, что это работает, функция не работает, как в Linux.
--------------------- ОБНОВЛЕНИЕ ----------------------
Не похоже, что на этот вопрос можно найти хороший ответ, но я нашел обходной путь благодаря одному из следующих предложений:
Поместите это в производственную среду. ПОМНИТЕ, ЧТОБЫ ПРИНЯТЬ НЕКОТОРЫЕ ФОРМЫ БЕЗОПАСНОСТИ НА ЭТОМ.
<?php print_r( get_defined_functions() ); ?>
Затем запустите это в среде разработчика. он выведет все функции, которые являются исключительными для локальной среды.
$root = file_get_contents( "<path to server>/available.php" );
$root = preg_replace( "/\[[0-9]{1,4}\]\s=>\s/", ( '' ), $root );
$tmp = '"internal" => array';
$root = explode( "\n", substr( $root, strpos( $root, $tmp ) + strlen( $tmp ) + 1 ) );
array_shift( $root );
array_shift( $root );
$internal = get_defined_functions();
$internal = $internal[ "internal" ];
function trim_array( array $root )
{
$nroot = array();
foreach( $root as $key=>$value )
{
$value = trim( $value );
if( !preg_match( "/^[a-zA-Z_]*[aeiouy]+[a-zA-Z0-9_]*$/", $value ) &&
!preg_match( "/^[a-zA-Z_]*(md5|crc|n12|str|sqrt|ch[a-z]?r|dl|tnt|ftp|png)[a-zA-Z_]*$/", $value ) )
{
//echo "\n $key ";
}
else
{
$nroot[] = $value;
}
}
return $nroot;
}
$root = trim_array( $root );
$internal = trim_array( $internal );
$diff = array_values( array_diff( $root, $internal ) );
foreach( $diff as $key => $fname )
{
if( in_array( $fname, $root ) )
{
echo "[$key] => $fname <= foreign server only";
}
else
{
echo "[$key] => $fname <= local";
}
echo "\n";
}