728x90

phpize 실행시 에러가 발생하면서 동작이 제대로 안되는 현상이 있는 사이트가 있다.


Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519
Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF
environment variable is set correctly and then rerun this script.


이런 메시지가 나오면서 phpize 가 실행이 되지 않는다.


검색해보니 http://panic910.tistory.com/52 에 해결방법이 나온다.

따라서 해보니 제대로 동작되고 동적 모듈이 추가된다.


# phpize 실행시 에러가 발생할 때

cd /usr/local/APM/
wget http://ftp.gnu.org/gnu/m4/m4-1.4.9.tar.gz
wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.62.tar.gz

cd /usr/local/APM/
tar -zvxf m4-1.4.9.tar.gz
cd /usr/local/APM/m4-1.4.9/
./configure && make && make install

cd /usr/local/APM/
tar -zvxf autoconf-2.62.tar.gz
cd /usr/local/APM/autoconf-2.62
./configure && make && make install


이렇게 해결되기도 하지만, 모듈이 제대로 추가되었다고 나오는데도 불구하고 모듈이 추가되지 않는 곳도 있다.


[root@localhost /]# /usr/local/php/bin/phpize
Cannot find config.m4.
Make sure that you run '/usr/local/php/bin/phpize' in the top level source directory of the module

해결방법

확장할 모듈까지 이동하여 phpize를 실행해야 함.

cd /usr/local/APM/php-5.6.30/ext/snmp
phpize


블로그 이미지

Link2Me

,
728x90

phpMyAdmin을 접속하면 아래와 같은 메시지가 나오는 사이트가 있다.

이 메시지가 나오지 않도록 해보자.


그리고

PHP언어를 통해 AES 암호화를 하려면 mcrypt_encrypt 함수를 이용해야 한다.
이 함수를 사용하려면 php-mcrypt 모듈 확장을 설치해야 한다.

가장 먼저 할 일은 <?php phpinfo();?> 로 PHP 버전을 확인한다.

그리고 설치된 사항을 확인한다.

PHP 버전을 확인했으면 리눅스 서버에 소스 컴파일했던 PHP 파일이 있는지 찾아본다.

만약 없다면 해당 버전을 받아 압축을 푼다.


=== 참고용 ====

yum install php-mcrypt 를 하면 버전이 낮은 버전이 설치된다.
# php-mcrypt 버전
rpm -qa | grep mcrypt
# 설치한 php-mcrypt 의 경로
rpm -ql php-mcrypt
# 설치된 경로가 /usr/lib/php/modules/mcrypt.so 라고 보여준다.
# 모듈 제거하기
rpm -qa | grep mcrypt
# 버전을 확인한 다음 remove 로 지운다.
yum remove php-mcrypt-5.1.6-15.el5.centos.1
yum remove libmcrypt-2.5.8-4.el5.centos


그래서 설치했던 걸 모두 삭제처리했다.


libmcrypt-2.5.8.tar.gz


먼저 위 파일을 다운로드 받아서 리눅스 서버에 올린다. (PHP 버전과 호환이 안되면 호환되는 버전을 찾아야 한다.)

cd /usr/local/APM/
tar -xvzf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure --prefix=/usr/local/
make && make install

그 다음에 설치한 버전과 동일한 버전의 PHP 소스 파일을 다운로드 받아서 압축을 해제한다.


tar -xvzf php-5.4.6.tar.gz
cd /usr/local/APM/php-5.4.6/ext/mcrypt
# phpize 파일을 실행한다.
/usr/local/php/bin/phpize

# configure 및 compile
./configure --with-php-config=/usr/local/php/bin/php-config --with-mcrypt=/usr/local/
make
# make 명령어를 실행후 ./modules/확장모듈명.so 파일이 생성되었는지 확인한다.

# 확장모듈.so 파일을 php.ini 파일의 extension_dir=확장모듈 경로에 복사한다.
# 먼저 php.ini 에서 .so 로 설치된 모듈을 찾는다.
# find / -name 'openssl.so'
# 찾은 경로로 복사한다.

cp -arp modules/mcrypt.so /usr/local/php/lib/php/extensions/no-debug-zts-20100525
cd /usr/local/php/lib/php/extensions/no-debug-zts-20100525

# php.ini 파일을 열어 extension=mcrypt.so 파일을 추가한다.
# 아파치(Apache) 재시작한다.
/usr/local/apache/bin/apachectl restart

파일이 설치되었는지 확인한다.
확인방법은
/usr/local/php/bin/php -m
또는 phpinfo()함수로 확인한다.



모듈이 추가된 것을 확인할 수 있다.

그리고 phpMyAdmin 접속시 메시지 나오는 것이 없어진 것을 확인할 수 있다.

'리눅스' 카테고리의 다른 글

CentOS6 SSH 포트 변경  (0) 2017.08.18
phpize 실행시 에러  (0) 2017.06.08
php sockets 동적 모듈 추가 (phpize)  (0) 2017.06.08
윈도우기반 리눅스 VMware 네트워크 설정  (0) 2017.05.28
리눅스 시스템 종료  (0) 2017.05.19
블로그 이미지

Link2Me

,
728x90

안드로이드 socket 통신에 대한 강의를 들으면서 소켓통신에 관한 사항을 알고 싶어졌다.

자바 서버 소스 파일을 다루는 방법은 아직 모르다보니 PHP 와 연동하는 방법을 찾아봤다.

PHP 서버에서 socket 설치 방법을 알아보니 현재 설치된 APM(Apache + PHP + MySQL)에 sockets.so 모듈이 설치 안되어 있다는 걸 확인했다.



가장 먼저 해야 할 일은 서버에 설치된 PHP버전과 동일한 php-5.4.6.tar.gz 파일을 인터넷에서 찾아서 받아야 한다.

받은 파일을 리눅스 서버에 올리고 압축을 해제한다.


cd /usr/local/APM/
tar -xvzf php-5.4.6.tar.gz


소스파일에서 설치할 확장모듈과 동일한 이름의 경로로 이동한다.
cd /usr/local/APM/php-5.4.6/ext/sockets


phpize 파일을 실행한다.

만약 에러가 발생하면 config.m4 파일이 없어서 발생하는 에러이므로 폴더를 확인하고 config.m4 파일로 복사한다.

/usr/local/php/bin/phpize


configure 및 compile 한다.
./configure --with-php-config=/usr/local/php/bin/php-config --enable-sockets
make


make 명령어를 실행후 ./modules/확장모듈명.so 파일이 생성되었는지 확인한다.


확장모듈.so 파일을 php.ini 파일의 extension_dir=확장모듈 경로에 복사한다.

확장모듈이 설치된 경로를 찾기 위해서 php.ini 에서 .so 로 설치된 모듈을 찾는다.


find / -name 'sockets.so'


찾은 경로로 복사한다. (모듈 설치 경로는 다를 수 있다)

cd /usr/local/APM/php-5.4.6/ext/sockets/modules
cp -arp sockets.so /usr/local/php/lib/php/extensions/
sockets.so

cd /usr/local/php/lib/php/extensions/

ll

로 sockets.so 파일이 복사되었는지 확인한다.


php.ini 파일을 열어 extension=확장모듈.so 파일을 추가한다.

extension=/usr/local/php/lib/php/extensions/sockets.so


아파치(Apache) 재시작한다.
/usr/local/apache/bin/apachectl restart

파일이 설치되었는지 확인한다.
확인방법은
/usr/local/php/bin/php -m
또는 phpinfo()함수로 확인한다.


여기서 주의할 점은 phpinfo()로 확인하면 아래 화면에는 변동된 내역이 없다.

최초 설치한 정보만 보인다.


하지만 아래로 내려보면 모듈이 추가된 것을 확인할 수 있다.


'리눅스' 카테고리의 다른 글

phpize 실행시 에러  (0) 2017.06.08
PHP mcrypt 동적 모듈 추가  (0) 2017.06.08
윈도우기반 리눅스 VMware 네트워크 설정  (0) 2017.05.28
리눅스 시스템 종료  (0) 2017.05.19
sftp 파일 전송 shell script  (0) 2017.03.09
블로그 이미지

Link2Me

,
728x90

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> //위치정보 확인함
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/> //위치정보 확인함
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> //wifi 연결을 확인함
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> //wifi 체인지를 확인함
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> //네트웍이 연결된것을 확인할수 있게함
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> //부팅완료를 확인할수있게함
<uses-permission android:name="android.permission.INTERNET"/> // 인터넷을 사용함
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> // 외장메모리 사용
<uses-permission android:name="android.permission.RECODER_AUDIO"/> //녹음이 가능하게 함
ACCESS_CHECKIN_PROPERTIES      체크인데이터베이스의_속성테이블로_액세스
ACCESS_COARSE_LOCATION         코스_로케이션_액세스_(Cell-ID/WiFi)
ACCESS_FINE_LOCATION           파인로케이션_액세스(GPS)
ACCESS_LOCATION_EXTRA_COMMANDS 로케이션_옵션_커맨드_액세스
ACCESS_MOCK_LOCATION           목_로케이션_프로바이더_생성_(테스트용)
ACCESS_NETWORK_STATE           네트워크_상태_접근
ACCESS_SURFACE_FLINGER         서피스_플링거_접근
ACCESS_WIFI_STATE              WiFi상태_접근
ADD_SYSTEM_SERVICE             시스템서비스_추가
BATTERY_STATS                  배터리_상태
BLUETOOTH                      블루투스
BLUETOOTH_ADMIN                블루투스_어드민
BRICK                          디바이스_실효성_지정
BROADCAST_PACKAGE_REMOVED      제거된_패키지에_대한_notification_브로드캐스트
BROADCAST_SMS                  SMS에_대한_브로드캐스트
BROADCAST_STICKY               인텐트_브로드캐스트
CALL_PHONE                     통화
CALL_PRIVILEGED                통화(긴급전화_포함)
CAMERA                         카메라
CHANGE_COMPONENT_ENABLED_STATE 컴포넌트의_실효성_변경
CHANGE_CONFIGURATION           컨피그_변경
CHANGE_NETWORK_STATE           통신상태_변경
CHANGE_WIFI_STATE              WiFi상태_변경
CLEAR_APP_CACHE                어플리케이션_캐시_클리어
CLEAR_APP_USER_DATA            어플리케이션의_유저데이터_클리어
CONTROL_LOCATION_UPDATES       위치정보_갱신
DELETE_CACHE_FILES             캐시파일_제거
DELETE_PACKAGES                패키지_제거
DEVICE_POWER                   전원상태에_대한_로우레벨_접근
DIAGNOSTIC                     진단리소스_읽고쓰기
DISABLE_KEYGUARD               키_가드_끄기_DUMP_덤?
EXPAND_STATUS_BAR              상태표시줄_확장
FACTORY_TEST                   팩토리_테스트
FLASHLIGHT                     플래시라이트
FORCE_BACK                     포스백
GET_ACCOUNTS                   어카운트_획득
GET_PACKAGE_SIZE               패키지_획득
GET_TASKS                      태스크_획득
HARDWARE_TEST                  하드웨어테스트
INJECT_EVENTS                  유저이벤트_키/트랙볼
INSTALL_PACKAGES               패키지_인스톨
INTERNAL_SYSTEM_WINDOW         내부_시스템윈도_활용
INTERNET                       인터넷
MANAGE_APP_TOKENS              어플리케이션_토큰관리
MASTER_CLEAR                   마스터_클리어
MODIFY_AUDIO_SETTINGS          오디오설정_편집
MODIFY_PHONE_STATE             전화상태_편집
MOUNT_UNMOUNT_FILESYSTEMS      파일시스템_편집
PERSISTENT_ACTIVITY            액티비티_지속
PROCESS_OUTGOING_CALLS         전화_발신처리_접근
READ_CALENDAR                  캘린더_읽어오기
READ_CONTACTS                  주소록_읽어오기
READ_FRAME_BUFFER              프레임버퍼_읽어오기
READ_INPUT_STATE               입력상태_읽어오기
READ_LOGS                      로그_읽어오기
READ_OWNER_DATA                owner_data읽어오기
READ_PHONE_STATE               통화상태_읽어오기_READ_SMS_SMS읽어오기
READ_SYNC_SETTINGS             동기설정_읽어오기
READ_SYNC_STATS                동기상태_읽어오기
REBOOT                         reboot
RECEIVE_BOOT_COMPLETED         boot완료
RECEIVE_MMS                    MMS수신
RECEIVE_SMS                    SMS수신
RECEIVE_WAP_PUSH               WAP수신
RECORD_AUDIO                   오디오_수신
REORDER_TASKS                  태스크_Z오더
RESTART_PACKAGES               패키지_리스타트
SEND_SMS                       SMS송신
SET_ACTIVITY_WATCHER           액티비티_왓쳐지정
SET_ALWAYS_FINISH              액티비티_전체_종료
SET_ANIMATION_SCALE            스케일_애니메이션_지정
SET_DEBUG_APP                  디버그어플리케이션_지정
SET_ORIENTATION                스크린_로테이션지정
SET_PREFERRED_APPLICATIONS     자주_사용하는_어플리케이션_지정
SET_PROCESS_FOREGROUND         포어그라운드_처리지정
SET_PROCESS_LIMIT              제한처리_지정
SET_TIME_ZONE                  타임존_지정
SET_WALLPAPER                  배경화면_지정
SET_WALLPAPER_HINTS            배경화면_힌트_지정
SIGNAL_PERSISTENT_PROCESSES    지속처리_시그널_지정
STATUS_BAR                     상태표시줄_지정
SUBSCRIBED_FEEDS_READ          서브스트립드_피즈_읽어오기
SUBSCRIBED_FEEDS_WRITE         서브스트립드_피즈_쓰기
SYSTEM_ALERT_WINDOW            알림_윈도우
VIBRATE                        진동
WAKE_LOCK                      알람
WRITE_APN_SETTINGS             APN설정_쓰기
WRITE_CALENDAR                 캘린더_쓰기
WRITE_CONTACTS                 주소록_쓰기
WRITE_GSERVICES                G서비스_쓰기
WRITE_OWNER_DATA               owner_data쓰기
WRITE_SETTINGS                 설정_쓰기
WRITE_SMS                      SMS쓰기
WRITE_SYNC_SETTINGS            동기설정_쓰기


출처 : http://iyeti.kr/673

블로그 이미지

Link2Me

,
728x90

안드로이드 SQLite DB 관련으로 알아두어야 할 사항이다.


rawQuery 를 이용하는 방법과 query를 이용하는 방법의 차이점이다.


rawQuery() Example

rawQuery() 메소드에 SELECT 구문을 넘겨 주기만 하면 된다.

인자로 idx 를 받아서 Where 조건문으로 일치하는 데이터 칼럼을 전부 가져오는 코드다.


 SQLiteDatabase db = getReadableDatabase(); // 읽기 가능한 데이터베이스

 Cursor cursor = db.rawQuery("select * from myTable where _idx = ?", new String[] { idx });

 SQLiteDatabase db = getReadableDatabase(); // 읽기 가능한 데이터베이스

 String sql = "SELECT idx, id, pw, name FROM member";

 Cursor cursor = db.rawQuery(sql, null);


query() Example

query() 메소드는 SELECT 구문의 각 부분을 쪼개 각 인자로 넘겨받고, 최종적으로는 SELECT문을 생성해 실행한다.

 Cursor cursor = db.query(DB_TABLE,
    new String[] { KEY_ROWID, KEY_CATEGORY, KEY_SUMMARY, KEY_DESCRIPTION },
    null, null, null, null, null);

 query() 가 받아서 처리하는 인자의 순서
 1. 대상 테이블 이름(DB_TABLE)
 2. 값을 가져올 컬럼 이름의 배열
    String[] columns ={
KEY_ROWID, KEY_CATEGORY, KEY_SUMMARY, KEY_DESCRIPTION};
 3. WHERE 구문. 물음표를 사용해 인자의 위치를 지정할 수 있다.

     "name=?"
 4. WHERE 구문에 들어가는 인자값

     String[] params ={"홍길동"};
 5. GROUP BY 구문
 6. ORDER BY 구문
 7. HAVING 구문
 테이블 이름을 제외한 각 값이 필요없는 경우라면 null을 지정한다.

 db.query(DBTable,columns,whereclause,whereargs,null,null,null);

 String query =
    "SELECT column1, (SELECT max(column1) FROM table1) AS max FROM table1 " +
    "WHERE column1 = ? OR column1 = ? ORDER BY column1";
 sqLiteDatabase.rawQuery(query, whereArgs);




SQLiteOpenHelper 클래스에서 제공하는 ContentVales 객체를 이용하여 DB를 update 하는 방법이다.

public void update(Integer idx, String name, String mobileNO, String officeNO) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put(Column_Name, name);
    cv.put(Column_mobileNO, mobileNO);
    cv.put(Column_officeNO, officeNO);
    db.update(TABLE_NAME, cv, "idx = ? ", new String[]{Integer.toString(idx)});
}


이 코드를 표준 SQL 문으로 입력한다면 아래와 같다.

public void update(Integer idx, String name, String mobileNO, String officeNO) {
    SQLiteDatabase db = this.getWritableDatabase();
    String sql ="Update "+TABLE_NAME+" SET name='"+name+"' mobileNO='"+mobileNO+"' officeNO='"+officeNO+"' where idx="+idx+"";
    db.execSQL(sql);
}



블로그 이미지

Link2Me

,
728x90

Toad for MySQL 파일을 다운로드하여 설치를 해봤다.


다운로드 :  http://software.dell.com/products/toad-for-mysql/


윈도우에 설치한 AutoSet9 에서 구동하는 MySQL DB 접속을 해보니 접속이 잘된다.

테이블 구조 설계를 위한 Database Diagram 을 할 수 있어서 엄청 편하다.

코딩을 하다보면 테이블 구조 파악이 쉽지 않아서 애를 먹는 경우가 있는데 이걸 이용해서 구조 설계를 해두면 엄청 편리할 거 같다.



블로그 이미지

Link2Me

,
728x90

컴파일 하려고 했더니 에러가 발생한다.

Error running app:
Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled.



해결방법

Enable your ADB Integration. Go to Tools --> Android --> set checked in Enable ADB Integration



블로그 이미지

Link2Me

,