ไม่สามารถรับ mcrypt สำหรับ PHP5


29

ฉันทำมาหลายครั้งแล้ว:

sudo aptitude install php5-mcrypt

sudo apache2ctl restart

ความถนัดว่า mcrypt ติดตั้งแล้ว ฉันติดตั้งใหม่ 3 ครั้งแล้ว ฉันรีสตาร์ท apache ประมาณ 20 ครั้งตั้งแต่ฉันติดตั้ง เมื่อฉันดู phpInfo ฉันไม่เห็น mcrypt อยู่ในรายการ เมื่อฉันพยายามที่จะรันรหัสของฉันมันบอกว่าฟังก์ชั่น mcrypt (เลือกหนึ่ง - คนใดคนหนึ่ง) ไม่มีอยู่ mcrypt ไม่ได้เปิดใช้งานอย่างชัดเจน

ไม่มีใครมีความคิดว่ามีอะไรผิดปกติหรือไม่? ฉันไม่รู้ว่าชิ้นส่วนใดควรอยู่ที่ไหนและอย่างไรทั้งหมดนี้ควรเข้าด้วยกัน

ฉันติดตั้ง PHP 5.5.3


คุณติดตั้ง PHP จากตัวจัดการแพ็คเกจ ( apt-get/ aptitude) ด้วยหรือไม่ แพ็คเกจphp5-mcryptสามารถกำหนดค่าส่วนขยายสำหรับphp.ini"รู้" เกี่ยวกับเท่านั้น ประการที่สองฉันไม่ตอนนี้ถ้าapache2ctlโหลดโมดูลอีกครั้ง "ปกติ" วิธีการที่จะเริ่มต้นใหม่ Apache sudo service apache2 restartจะเป็นสิ่งที่ชอบ ประการที่สาม PHP เชื่อมโยงกับ Apache ของคุณอย่างไร หากคุณใช้บางอย่างเช่น (f) cgi หรือ php-fpm (ตรงกันข้ามกับ mod-php) คุณอาจจะต้องรีสตาร์ท PHP ด้วยตัวเองนอกจากนี้เพื่อรีสตาร์ท Apache
Henning Kockerbeck

เราติดตั้งทุกอย่างโดยใช้ความถนัด apache2ctl หยุดและเริ่ม apache ใหม่ เรารีสตาร์ทคอมพิวเตอร์หลายครั้งตั้งแต่การติดตั้งเหล่านี้ เชื่อใจฉันเมื่อฉันบอกว่า apache ถูก "รีสตาร์ท" ตั้งแต่เราติดตั้ง php5-mcrypt - เช่นเดียวกับ PHP PHP5 ทำงานได้ดีเหมือนโมดูล Apache - เป็นเว็บไซต์ที่เขียนด้วย PHP - ดังนั้นฉันคิดว่า PHP ถูกติดตั้งเป็นโมดูล Apache ถ้าฉันไปที่ / etc / apache2 / mods-enabled php5 อยู่ในรายการนั้น ฉันไม่เห็น mcrypt ใน / etc / php5 / mods-available แต่ถ้าฉันทำ sudo aptitude search mcrypt ฉันเห็น 3 สิ่งที่ติดตั้ง: libmcypt4, mcrypt และ php5-mcrypt - ????
webDeveloperDave

ซึ่งphp.iniเป็น บริษัท จดทะเบียนในการส่งออกของphpinfo(ประมาณ 5 ไปยังรายการที่ 7)? มันควรจะเป็นไฟล์/etc/php5/มา หากคุณค้นหาในไฟล์mcryptนั้นจะเกิดอะไรขึ้น
Henning Kockerbeck

php.ini อยู่ใน /etc/php5/apache2/php.ini มีส่วน mcrypt ในนั้นมี 2 การตั้งค่า - ทั้งความเห็นออก - mcrypt.algorithms_dir และ mcrypt.modes_dir ความคิดเห็นข้างต้นพวกเขาบอกว่าเริ่มต้นคือ / usr / local / lib / libmcrypt - ไดเรกทอรีเหล่านั้นไม่มีอยู่ นี่คือสิ่งแรกที่ฉันรู้ว่า mcrypt อาจไม่ได้รับการติดตั้งแม้ว่าความถนัดจะบอกว่ามันเป็น ถ้าฉันทำ sudo aptitude info mcrypt จะบอกว่าสถานะของแพ็คเกจนั้นได้รับการติดตั้งแล้ว - เวอร์ชั่น 2.6.8-1.3 - มันบอกว่า Conflicts: mcrypt - มันบอกว่าไง? ที่แพคเกจนี้ขัดแย้งกับตัวเอง? มีวิธีที่ดีกว่าในการเข้ารหัสข้อมูลผู้ใช้หรือไม่
webDeveloperDave

คุณไม่จำเป็นต้องใส่ใจเกี่ยวกับmcryptแพคเกจ นั่นคือโปรแกรมบรรทัดคำสั่งที่ใช้ libmcrypt เช่นเดียวกับส่วนขยาย PHP ดังนั้นคุณต้องแน่ใจว่าlibmcrypt4ติดตั้งแพ็คเกจแล้ว มีphp.iniตัวอย่างข้อมูลที่/etc/php5/conf.d/mcrypt.iniหรือไม่ ที่ควรโหลด lib ข้อมูลโค้ดนั้นโหลดโดย PHP (ดูphpinfo) หรือไม่ อีกครั้งที่คุณพยายามที่จะเริ่มต้นใหม่กับอาปาเช่sudo service apache2 restartแทนapache2ctl?
Henning Kockerbeck

คำตอบ:


62

ลองสิ่งนี้

sudo php5enmod mcrypt

sudo service apache2 restart

ทำงานได้ดีและ symlink (มากกว่าการคัดลอกทุกอย่าง) คือ +1 สำหรับฉัน โหวตขึ้นแล้ว!
Stefano Mtangoo

4
สิ่งนี้ใช้ได้สำหรับฉัน แต่ฉันไม่ต้องการคำสั่งแรก (ln) ฉันไม่มี mcrypt.ini อยู่ในโฟลเดอร์ /etc/php5/apache/conf.d การเรียกใช้ sudo php4enmod mcrypt ทำงาน ไฟล์ที่นั่นตอนนี้ เซิร์ฟเวอร์ใช้งานได้! ขอบคุณมาก.
เตอร์

1
ขอบคุณมันทำงานได้ดี แต่ฉันต้องการทราบเกี่ยวกับคำสั่งที่คุณใช้ "sudo php5enmod mcrypt" .. นี่คืออะไร .. ? อะไรคือวัตถุประสงค์ในการใช้คำสั่งนี้ .. ?
Elavarasan

1
"sudo php5enmod mcrypt" จะสร้าง symlink ในไดเรกทอรี "/etc/php5/conf.d" ด้วยหมายเลขลำดับความสำคัญ (ค่าเริ่มต้น 20) เพื่อให้คุณสามารถถอนการติดตั้งโดยไม่ต้องแก้ไขไฟล์ ini ด้วย "sudo php5dismod mcrypt"
Vizjerai

11

ฉันมีปัญหาคล้ายกันใน Ubuntu 13.10 เมื่อเรียกใช้ตัวติดตั้งจะทำให้เกิดข้อผิดพลาดเดียวกันซึ่งลงท้ายด้วย

****Mcrypt PHP extension required.
Script php artisan clear-compiled handling the post-update-cmd event returned with an error

  [RuntimeException]  
  Error Output:****   

ฉันติดตั้งmcryptและphp5-mcryptมีความถนัดและยังคงphp -mไม่แสดงmcryptเป็นส่วนขยายที่โหลด:

aptitude install mcrypt
aptitude install php5-mcrypt

ฉันวิ่งแล้วupdatedb locate mcryptผมพบว่าของฉันในmcrypt.ini /etc/php5/conf.dแต่ทุกส่วนขยายอื่น ๆ (เช่น JSON) มีไฟล์ ini ของพวกเขาใน และ/etc/php5/apache2/conf.d เหล่านี้ทั้งสองเชื่อมโยงไปยัง/etc/php5/cli/conf.d../../mods.available

ดังนั้นฉันจึงย้ายmcrypt.iniไปที่/etc/php5/available-modulesและตั้งค่าลิงก์:

cd /etc/php5/cli/conf.d
ln -s ../../mods-available/mcrypt.ini 20-mcrypt.ini

/etc/php5/apache2/conf.dและในทำนองเดียวกันสำหรับ

และ voila มันปรากฏตัวขึ้นในphp -m!


ขอบคุณมากสำหรับคำตอบนี้ เรียงลำดับฉันโดยสิ้นเชิง แม้ว่าฉันจะไม่ย้าย /etc/php5/conf.d/mcrypt.ini - ฉันเพิ่งตั้งค่าลิงก์สัญลักษณ์ของฉันให้ชี้ไปยังตำแหน่งที่ใช้งานได้และน่าจะมั่นใจได้ว่าการอัปเดต mcrypt ในอนาคตจะถูกโหลดโดยอัตโนมัติหรือไม่
alexleonard

2

ดูเหมือนว่าข้อมูลโค้ด ini ที่โหลด libmcrypt เมื่อ Apache เรียกว่า PHP หายไป ควรมีไฟล์ที่เรียกว่า/etc/php5/apache2/conf.d/mcrypt.iniมีเนื้อหาดังต่อไปนี้

; configuration for php MCrypt module
extension=mcrypt.so

คุณควรจะสามารถคัดลอกจาก vonfigurations อื่น ๆ ของ PHP รวม/etc/php5/cli/conf.d/mcrypt.iniหรือ/etc/php5/conf.d/mcrypt.iniขึ้นอยู่กับสิ่งที่ติดตั้งบนระบบของคุณ


2

โมดูล mcrypt ไม่ได้เปิดใช้งานโดยค่าเริ่มต้น เปิดใช้งานโมดูล mcrypt แล้วรีสตาร์ท apache ( เครดิต )

sudo php5enmod mcrypt
sudo service apache2 restart

1

นี่มันสิ ดูเหมือนว่าบางครั้งเราอยู่ในการค้นหาวิธีที่ยุ่งเหยิงที่สุดในการทำสิ่งที่ง่ายเหมือน 'enmod'; ) เช่นเดียวกับ Boinst พูดว่า: sudo php5enmod mcrypt. จากนั้นโหลด apache ใหม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.