PHP 컴파일 하는데 오류...

사랑천사의 이미지

안녕하세요?
이여송 사도요한입니다.

데비안에서 서버를 대강 구축 하고 PHP를 컴파일 하는데 오류가 나네요 음... fork ()함수와 POSIX 함수들을 거의 모두 못 쓰는걸로 나오고 잘 깔려있는 readline아 못 쓰는걸로 나옵니다.

그래서 fork ()함수를 사용한 소스를 간단히 짜 봤는데 정상적으로 컴파일 되고 작동 했습니다 음... 내뇽은 아래와 같습니다.

lanet:~# cat src/c/xxx.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

int main (void)
{
  int spid;

  spid = fork ();
  if (!spid) {
    printf ("Sub Process:%d (%d)\n", getpid (), getppid ());
  }
  else {
    printf ("Pre Process:%d (%d)\n", getpid (), spid);
  }
}

lanet:~# cd src/c
lanet:~/src/c# rm xxx;gcc -o xxx xxx.c
lanet:~/src/c# ./xxx
Sub Process:30911 (30910)
Pre Process:30910 (30911)
lanet:~/src/c# 

음... 그리고 분명히 /usr/lib/libreadline5.a(맞나)가 잇는데로 readline가 없다고 하고 getgroups 등의 함수들을 모두 못 사용하는걸로 나옵니다. (사용 가능하면 yes가 되어야 하는데 no네요 전부...)

혹시 이게 왜 그런지 아시는분... 계실런지... 이전엔 이런 일이 없었거든요 음... 히얀하군요...

이여송 사도요한 드림.

익명 사용자의 이미지

해더파일은 있는지요? readline-devel 혹은 readline-dev 등등의 파일을 배포판에 맞게 설치되어 있는지 확인해 보세요.

사랑천사의 이미지

영 엉뚱한 곳에 답이 있네요... UNIXODBC를 못 쓰게 하니 문제가 해결 되는군요. 그 어떤것도 문제가 없었는데 UNIXODBC때문에 그러네요.. 왜 그러는지는 잘 모르겠지만, 그것만 --with-unixODBC... 요렇게 넣어 주면 탈이 나는군요 음...

사람천사

사랑천사의 이미지

이번엔 연산 처리가 안 되는군요.. 알지보드에 get_password_str 함수입니다. (PHP)내용은 아래와 같고요.

	function get_password_str($pass) {
	// mysql 4.1.0 부터 passowrd 함수의 값이 무작위로 변경되어 
	// 기존 password 함수와 동일한 알고리즘의 코드로 바뀌었다.
		$nr = 1345345333;
		$add = 7;
		$nr2 = 0x12345671;
		
		$size = strlen($pass);
		for($i=0;$i<$size;$i++)
		{
      // skipp space in password
			if($pass{$i} == ' ' || $pass[$i] == '\t') continue;  
			$tmp = ord($pass{$i});
			$nr ^= ((($nr & 63)+$add)*$tmp) + ($nr << 8);
			$nr2 += ($nr2 << 8) ^ $nr;
			$add += $tmp;
		}
		$result1=$nr & ((1 << 31) -1); // Don't use sign bit (str2int) 
		$result2=$nr2 & ((1 << 31) -1);
		$result = sprintf("%08x%08x",$result1,$result2);
		return $result;
/*
		global $dbcon;
		// mysql 4.1 부터 password 함수가 old_password 로바뀌었다.
		$rs = query("SELECT old_password('$pass')",$dbcon);
		$tmp=mysql_fetch_row ($rs);
		mysql_free_result($rs);
		return $tmp[0];
*/
	}

이것이.. 어떤 값을 함수에 줘도 항상 000000000이렇게만 나오는군요... 변함이 없습니다... 이전엔 분명히 잘 되던 함수엿는데... 안 되는군요. 아래에 configure에서 사용한 부분입니다.
#!/bin/sh
CC="gcc-3.4"
CFLAGS="-g -O3 -march=i686"
export CFLAGS CC
./configure --prefix=/usr --libdir=/usr/lib --includedir=/usr/include \
--with-apxs2=/usr/sbin/apxs --with-mod_charset \
--libexecdir=/usr/libexec --mandir=/usr/share/man \
--with-config-file-path=/etc \
--with-openssl --with-kerberos --with-zlib --with-bz2 --with-jpeg-dir \
--with-curl --with-gd --with-jpeg-dir --with-png-dir \
--with-freetype-dir --with-ttf --enable-gd-native-ttf \
--with-imap --with-kerberos --with-imap-ssl \
--with-ldap --with-ldap-sasl --with-openssl-dir --with-mysql --with-pgsql \
--enable-bcmath --enable-calendar --enable-sigchild --enable-magic-quotes \
--enable-sockets --with-regex=php --enable-exif --enable-ftp --enable-mbstring \
--enable-pcntl --enable-fastcgi --enable-shmop --enable-sysvshm \
--enable-sysvmsg --enable-sysvsem --with-gmp \
--with-ncurses --with-readline --enable-soap --with-gettext

음.. 뭐가 문제일까요... 처음엔 --enable-libgcc를 넣었었는데 그게 문제인가 해서 그걸 지우고 해 보기도 했습니다. 음... 별로 문제 될 것이 없어 보이는데 히얀하네요... 아파치에서도, CLI에서도 모두 안 되네요 음...

아무튼... 문제가 있어 보이는 부분 지적 부탁 드립니다.. 음...

OS:Debian GNU/Linux 3.1(Sarge)
Arch:i686
Kernel:2.6.12.3-4LANET
GCC Version:3.3.5/3.4.4
Q:물론 아래 부분의 주석을 제거하고 기능을 대체 할 수도 있지만, 그것 이외에 이 함수의 기본적인 연산 기능을 이용해서 처리 가능하게 되어야 하는데 문제군요.

사람천사

송효진의 이미지

데비안에서 제공하는 php 패키지의 소스를 받아서 패치까지 적용한 후,
데비안에서 하는 컴파일 옵션을 기초로 컴파일을 하는것이 좋을것 같네요.

제가 이런것 때문에 젠투를 써요. :oops:

익명 사용자의 이미지

ysnglee2000 wrote:
이번엔 연산 처리가 안 되는군요.. 알지보드에 get_password_str 함수입니다. (PHP)내용은 아래와 같고요.

	function get_password_str($pass) {
	// mysql 4.1.0 부터 passowrd 함수의 값이 무작위로 변경되어 
	// 기존 password 함수와 동일한 알고리즘의 코드로 바뀌었다.
		$nr = 1345345333;
		$add = 7;
		$nr2 = 0x12345671;
		
		$size = strlen($pass);
		for($i=0;$i<$size;$i++)
		{
      // skipp space in password
			if($pass{$i} == ' ' || $pass[$i] == '\t') continue;  
			$tmp = ord($pass{$i});
			$nr ^= ((($nr & 63)+$add)*$tmp) + ($nr << 8);
			$nr2 += ($nr2 << 8) ^ $nr;
			$add += $tmp;
		}
		$result1=$nr & ((1 << 31) -1); // Don't use sign bit (str2int) 
		$result2=$nr2 & ((1 << 31) -1);
		$result = sprintf("%08x%08x",$result1,$result2);
		return $result;
/*
		global $dbcon;
		// mysql 4.1 부터 password 함수가 old_password 로바뀌었다.
		$rs = query("SELECT old_password('$pass')",$dbcon);
		$tmp=mysql_fetch_row ($rs);
		mysql_free_result($rs);
		return $tmp[0];
*/
	}

설마 연산처리가 안되려구요. 그건 모든 옵션 다 빼더라도 기본적으로 되어야 하는 것 아닌가요..
사랑천사의 이미지

Anonymous wrote:
ysnglee2000 wrote:
이번엔 연산 처리가 안 되는군요.. 알지보드에 get_password_str 함수입니다. (PHP)내용은 아래와 같고요.

	function get_password_str($pass) {
	// mysql 4.1.0 부터 passowrd 함수의 값이 무작위로 변경되어 
	// 기존 password 함수와 동일한 알고리즘의 코드로 바뀌었다.
		$nr = 1345345333;
		$add = 7;
		$nr2 = 0x12345671;
		
		$size = strlen($pass);
		for($i=0;$i<$size;$i++)
		{
      // skipp space in password
			if($pass{$i} == ' ' || $pass[$i] == '\t') continue;  
			$tmp = ord($pass{$i});
			$nr ^= ((($nr & 63)+$add)*$tmp) + ($nr << 8);
			$nr2 += ($nr2 << 8) ^ $nr;
			$add += $tmp;
		}
		$result1=$nr & ((1 << 31) -1); // Don't use sign bit (str2int) 
		$result2=$nr2 & ((1 << 31) -1);
		$result = sprintf("%08x%08x",$result1,$result2);
		return $result;
/*
		global $dbcon;
		// mysql 4.1 부터 password 함수가 old_password 로바뀌었다.
		$rs = query("SELECT old_password('$pass')",$dbcon);
		$tmp=mysql_fetch_row ($rs);
		mysql_free_result($rs);
		return $tmp[0];
*/
	}

설마 연산처리가 안되려구요. 그건 모든 옵션 다 빼더라도 기본적으로 되어야 하는 것 아닌가요..

다른건 다 좋은데.. 요 부분...
		$result1=$nr & ((1 << 31) -1); // Don't use sign bit (str2int) 
		$result2=$nr2 & ((1 << 31) -1);

요 부분에서 문제가 발생합니다. 디버깅 용으로.
printf ("R:%d, R2:%d\n", $result1, $result2);
이 부분을 sprintf 부분 전에 넣었습니다. 그러니 전부 -21억 어쩌고... (LONG INT에서 +/- 최고값) 흐흠. 그렇게 나오네요...
이상합니다 이거... 이 코드.. New21에선 잘 돌아 가거든요... 근대 왜 그런지... 흠..

아무튼 관심 감사 드립니다.
이여송 사도요한 드림.

사람천사

사랑천사의 이미지

C로 돌리니 잘 되는데... 이건 필시 PHP나.. PHP를 컴파일 할 때 사용된 라이브러리들 중의 하나에 문제가 있는것 같은데 뭐가 문제인지 모르겠네요 음...

사람천사

사랑천사의 이미지

C에서나.. 기타 언어에서 저 알고리즘이 정상적으로 작동하고, 실재로 이전의 PHP에서도 정상 작동 하는것으로 볼 때... 그 원리는 Intger Overflow에 의한 것인데... Long Int이던 Short Int이던 자신의 최고 한도(Short Int:-32767~+32768)를 넘어서면 다시 음수부터 가서 넘어 오게 되는데... PHP에서 오버플로우 되는걸 막아 버린것 같은데... 어쩌면 버그를 이용한 알고리즘이 될지는 몰라도, 억지로 알고리즘에 버그를 넣거나 오버를 만들어서 계산을 하게 되는 경우도 있는걸로 알고 있습니다. 그렇다면, 이걸 꼭 이런식으로 막어서 정상적으로 동작 해야할 알고리즘이 안 돌아 가게 해야 하는건지 모르겠군요.

누가 이거 해제 하는 방법 아시는분... 음... 이것만 알면 될 것 같은데 영 그렇네요 음...

사람천사

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.