ארכיון תגיות: php

חיבור דינמי לדאטאבייסים רבים ב-Laravel

יש לי פרויקט שבו לכל יוזר יש דאטאבייס משלו.
עכשיו, תוך כדי ריצה, אני צריך להתחבר לדאטאבייס הנכון.
הפרויקט הוא על Laravel ( כיום 5).

אז השלב הראשון לפתרון העניין, הוא הוספה דינמית של הגדרה.
כלומר – כידוע, בדרך כלל ההגדרות של הדאטאבייסים ב-Laravel יושבות במערך שמוגדר בקובץ database.php בתיקית config.

עכשיו, כיוון שזאת הגדרה לכל דבר ועניין, אז laravel מאפשרת להוסיף הגדרות דינמיות , באמצעות המתודה Config::set.

אז ככה אני מגדיר דאטאבייס חדש , מה שנקרא "on the fly", כלומר תוך כדי ריצה :

 Config::set('database.connections.'.'YOUR KEY COME HERE', array(
            'driver'    => 'mysql',
            'host'      => env('DB_HOST', 'localhost'),
            'database'  => $this->dbName,
            'username'  => env('DB_USERNAME', 'root'),
            'password'  => env('DB_PASSWORD', 'YOUR PASSWORD COME HERE'),
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'strict'    => false,
                     ));

נא תשומת לב למספר נקודות :
1. השתמשתי ב-dot.notation, כלומר בתחביר של נקודה מפרידה, ו-Laravel יודעת להפריד אותו לבד.
2. המקום שבו סימנתי Your key come here – מיועד כמובן, כדי לתת שם יחודי ל-Connection הזה.

ועכשיו, אחרי שהגדרנו –
אז נשאר לבצע שאילתות.
אני אדגים על שאילתא בצורה גולמית, בלי להתייחס במאמר הזה ל-Eloquoent בינתיים.
אז נניח ואני רוצה לבצע שאילתת select על טבלת users באותו דאטאבייס שאליו התחברתי :
זה הולך ככה :

 $results = DB::connection($user->id)->select('select * from users where id > ?', [0]);

זהו, ראינו כאן איך להתחבר באופן דינמי לדאטאבייסים ב-laravel.
יום נעים
איל

3077990150_709af8df13_xml

להפוך DomNodeList למערך. PHP – DomDocument – Convert DomNodeList to Assosiative array

xml DomNodeList To php array
Photo by dpstyles™

האובייקטים של DomDocument ב-php הם מתעתעים, היות והם לא מתנהגים כרגיל, ולא מאפשרים לעשות עליהם var_dump וכדומה.

להלן פונקציה פשוטה, לא רקורסיבית, שהופכת DomNodeList למערך אסוציאטיבי.

נא תשומת לב – כדי לקבל DomNodeList אפשר פשוט להשתמש על אוביקט ה-XML במתודה getElementsByTagName

ומה שמקבלים בחזרה – הוא אוביקט DomNodeList


/* Get DomNodeList Object
* and return an assosiative array
* This function is NOT recursive
*/
function DomNodeListToArray(DOMNodeList $domNodeList)
{
$items = $domNodeList;
$headlines = array();

foreach($items as $item) {
$headline = array();

if($item->childNodes->length) {
foreach($item->childNodes as $i) {
$headline[$i->nodeName] = $i->nodeValue;
}
}

$headlines[] = $headline;
}
return $headlines;
}

 

מקור – ההערות של הדוקומטציה http://php.net/manual/en/domdocument.getelementsbytagname.php

איך להחזיר ב-Laravel רשימה עבור select במהירות ?

פעמים רבות, כאשר אנו יוצרים טופס HTML, צריך לשלוף רשימה מתוך טבלה ב-DB ולשים אותה בתוך select בטופס ה-HTML.
כאשר פעמים רבות, לכל ערך יש מפתח בטבלה, ואותו נרשום ב-select בתור ה-value.
ב-laravel יש צורה ממש פשוטה לעשות זאת, הן ישירות על הדאטאבייס והן עם מודל של Eloquent .

ישירות מהדאטאבייס :

DB::table('foo')->list('name','value');

ועל מודל של Eloquent זה עובד דומה, אבל משום מה המתודה מסתיימת ב-S

להלן דוגמא מפרויקט שלי על מודל של Eloquent :

AppJob::where('company','=',$company->company)->lists('job','id');

מה שזה מחזיר – זה מחזיר בכל מקרה מערך רגיל, כשהמפתח הוא עמודת המפתח שציינו, והערך – הוא עמודת הערך.

 

אז כדי ליישם את זה בתבנית של Blade זה נראה כך


                        @foreach($list as $key => $value)
                            
                        @endforeach
                  

התקנת Yii 2 על linux עם php composer

במדריך הזה, אני מראה איך להתקין את Yii 2 על לינוקס עם composer.

  • פתח תיקיה חדשה בתיקית ה-web שלך.
  • דאג שיהיו לך הרשאות מתאימות לתיקיה (chown/ chmod )
  • מתוך התיקיה – הקלד את הפקודות הבאות  ב-console כדי להוריד את ה-composer אל תוך התיקיה, וכדי להתקין אותה במצב "גלובלי"
sudo curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
  • השלב הבא הוא להוריד פלאגאין ל-Composer ולהתקין אותו
    כיוון שהעברנו את ה-composer לתיקיה אחרת, ושינינו את שם הקובץ, הפקודה תהיה כך :
sudo php /usr/local/bin/composer global require "fxp/composer-asset-plugin:1.0.0-beta3"
  • עכשיו – אם יש לך חשבון GitHub, אז תיזכר בשם משתמש והסיסמא, ואם לא – אז פתח לעצמך חשבון.
  • ועכשיו הרץ את הפקודה הבאה ב-Console :
sudo php /usr/local/bin/composer create-project yiisoft/yii2-app-basic basic 2.0.0
  • ה-composer יתחיל בהתקנה ויתכן שידרוש להקליד את שם המשתמש והסיסמא ב-Git.

בסיום ההתקנה – אתם מוזמנים לגלוש אל הפרויקט שהותקן.

הערה : בדוגמא התקנו את פרויקט basic של Yii, יש גם אפשרות להתקין פרויקט advanced.

המדריך מפורסם לפי התנאים של Yii, והמקור נמצא כאן, במקרה זה בוצעו מספר שינויים בתרגום להתאמה ל-ubuntu

איך לעשות לולאה על רשומות נבחרות בטופס מסוג Multiple Records של ScriptCase

ל-ScriptCase יש טופס נפלא שנקרא multiple records , היתרון העצום שלו הוא שהוא מזהה לבד באיזה רשומות המשתמש מטפל, ומציע כפתור שישמור את כל הרשומות האלו *יחד*, בפעולה אחת.

עכשיו – נניח ואני רוצה ליצור לולאה על כמה רשומות נבחרות
על פניו – זה נראה בעיה ,
כיוון שיש אומנם שדה (לא בדאטאבייס, רק על המסך) של ScriptCase שמזהה את הטיפול ברשומה, וזה באמת שדה CheckBox.
אבל
אי אפשר לגשת אליו בצורה קלה.

ולכן – עשיתי ככה :
1 הוספתי שדה על המסך בלבד – מסוג CheckBox
2 בשדה הזה – ה-Lookup הוגדר Manual, עם ערך בודד של 1 במקרה של ChecK (כלומר אם סימנו אותו =1 )
3 אחרכך באירוע OnLoad של הטופס – הגדרתי מערך ריק,
4 כאשר ב-Gloabal Variable הגדרתי אותו כ-Out
5 באירוע OnLoadRecord של כל רשומה – איפסתי את הערך הרלוונטי במערך, כאשר שימו לב
ה-Key שלי במערך הוא – המפתח הראשי של הרשומה .

[selected][{id_partner}] = 0;

6 עכשיו עשיתי אירוע Ajax על OnClick של השדה מסוג CheckBox
ובאירוע הזה למעשה אני מציג באיבר הרלוונטי במערך – את הערך של ה-CheckBox
כלומר אם הוא מסומן – אנחנו נקבל 1, אחרת נקבל 0

 [selected][{id_partner}] = {select_record};

7 עכשיו הגענו סוף סוף לכפתור , תגדירו כפתור חדש בטופס
וזה הקוד שמציג בסוף את המפתחות הראשיים של הרשומות הנבחרות :

foreach (array_keys([selected], 0, true) as $key)
{
unset([selected][$key]); //get rid of the unselected id's
}
$selection = implode(',',array_keys([selected])); // now you have a comma separated list of id's of your selected records
echo $selection;

הסבר קצר לקוד
הפונקציה Array_keys – יוצרת "מערך" שמכיל רק את המפתחות.
הפרמטר השני שהוא אפס – אומר לפונקציה להחזיר רק מפתחות שמכילים 0.
והפרטמטר השלישי – true אומר לפונקציה שהאפס חייב להיות מאותו סוג משתנה , כמו האופרטור === ב-php

בתוך הריצה של הלולאה – אנחנו למעשה מוחקים את כל האיברים שמכילים 0.

ואז אחרי הלולאה – הפונקציה implode למעשה יוצרת מחרוזת עם כל איברי המערך (שנותרו) , ובינהם היא שמה פסיק.
ולבסוף מציגים את זה.

זהו תרגום בעברית, מסודר יותר, של מה שכתוב בדיון הזה בפורום :
http://www.scriptcase.net/forum/showthread.php?5574-How-select-records-from-a-multiple-record-form-flagging-row-specific-check-box-field&highlight=selected

המרת קידוד מ-UNICODE בעברית אל UTF-8

יש לי תוצר של VBA
ה-VBA מייצא ASCII
העברית מתקבלת בצורת קודים מוזרים של UNICODE
למשל האות "פ" הופכת להיות & # x 5 e 4 (זה הקס-דצימלי)

אני מעבד את המידע המתקבל ב-php
והמטרה היא להפוך אותו ל-UTF-8

ראיתי כמה פתרונות
הכי יעיל והכי קצר לדעתי הוא זה :

$replacedString = preg_replace("/\\u([0-9abcdef]{4})/", "&#x$1;", $originalString);
$unicodeString = mb_convert_encoding($replacedString, 'UTF-8', 'HTML-ENTITIES');

המקור הוא http://stackoverflow.com/questions/2045058/converting-these-types-of-unicode-to-utf8-in-php/7546249#7546249

איך להפעיל pdftk על php – על linux red hat

pdftk זהו שירות, שבסיסו הוא חינמי, ואפשר לרכוש רשיון לשימוש מסחרי.
שירות מעולה, שעובד מאוד מהר.

אם רוצים להפעיל אותו על php נתקלים בהמון בעיות.
הרשת מפוצצת בתיאורים של אנשים שלא הצליחו להפעיל,
חלק מהאנשים אפילו כתבו קודים ב-perl שמופעל דרך php, והקוד perl מפעיל את ה-pdftk – מה שנקרא "לעקוף בגסות".

אז מיפיתי את הדברים שצריך לבדוק כדי שיפעל נורמלי :

1. חייבים הרשאה בהגדרות של php לפקודה exec או ל system , אחרת אין איך להפעיל את זה (כלומר אם יש לך shared hosting … בדרך כלל אין מה לעשות).
2. בתיקיה שבה אתה רוצה ש-pdftk תיצור את הקבצים – צריכות להיות הרשאות מקסימליות.
כלומר תן לה הרשאות 777.
(או דרך תוכנת ftp כלשהיא, או בפקודה ישירות על השרת chmod 777 YourPath ).
3. הפניה ל-pdftk חייבת להיות למיקום שבו הקובץ יושב
כלומר על התקנה רגילה של Linux , זה אמור להיות משהו כזה /usr/bin או כזה /usr/local/bin
4. גירסת ה-pdftk – חייבת להיות 1.43 ומעלה (כאשר אני כותב את הפוסט הזה יש כבר 2.2 )

והלן קוד להדגמה :


$command = "/usr/bin/pdftk 1.pdf 2.pdf cat output /var/www/html/files/p1.pdf verbose";

exec($command);

למשל אם נלך בעקבות הקוד הזה –
אז התיקיה files – עם הרשאות 777
ומיקום הקובץ pdftk הוא ב /usr/bin/pdftk
וגם יש הרשאה לפקודה exec

בהצלחה!

איך להתקין mcrypt על php (לינוקס redhad )

בתיעוד הרשמי של php, כתוב שכדי להתקין את התוספת mcrypt יש צורך לקמפל מחדש את php.

לפי ההמלצה כאן לא צריך לנסות לקמפל לבד.

הוא ממליץ שם לבצע התקנה באמצעות RPM יחד עם YUM .

הסברים למושגים אלו :
RPM – זוהי המילה עבור "חבילת התקנה" בלינוקס
YUM – זוהי תוכנה שמתקינות חבילות RPM, התוכנה מבוססת על פקודות משורת הפקודה (ויש גם ממשק גרפי באמצעות הרחבות)

ה-RPM שהוא ממליץ עליו, נמצא בפרויקט שנקרא EPEL,
EPEL – זהו פרויקט של חבילות התקנה שמתאימות ל- RedHat .
זהו פרויקט חופשי.

לעבודה :
– תשיגו הרשאה של אדמיניסטרטור (sudo su – , ראו באחד הפוסטים הקודמים)
– הפקודה הבאה יוצרת קשר לפרויקט EPEL, כך שאפשר להשתמש ב-YUM , והוא יחפש חבילות התקנה גם ב-EPEL.

su -c 'rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm'

* הערה , אני השתמשתי בקישור שמיועד עבור redHat 6 , כמובן, תתאימו את זה לצורך שלכם, הקישורים משתנים מדי פעם, ראו כאן

– עכשיו אפשר להשתמש פשוט בתוכנת YUM (כמובן, שימו לב למה שהיא רושמת, ותענו y איפה שצריך ).

yum install php-mcrypt

וזהו, התוספת mcrypt מותקנת על ה-php אצלכם בשרת.

כדי לבדוק אם ההתקנה תקינה , צרו דף עם הפקודה phpinfo , וחפשו את התוספת mcrypt .

בהצלחה!