В PHP4 объекты передавались по значению и чтобы передать их по ссылке надо было ставить &.
В современном PHP все объекты передаются по ссылке, так что & использовать для объектов бессмысленно.
& есть смысл использовать только для прочих типов данных, типа чисел, строк, массивов....
Так mysqli_fetch_assoc() извлекает только один ряд, а не всю выборку! Если хотите получить всю выборку - надо крутить вызов mysqli_fetch_assoc в цикле. Типа того
while ($row = $result->fetch_assoc()) {
....
}
А вы извлекаете один ряд, а потом пытаетесь крутить по нему цикл, думая что крутите его по записям, а на самом деле, цикл у вас крутиться по полям одной первой записи.
Переход с PHP 5.2 на 5.3 почти всегда сопровождался проблемами. Слишком сильные изменения были сделаны между этими версиями. Не помню, чтобы переходы между другими версиями были бы на столько же проблемными.
В ряде случаев проблемы возникали из за того, что 5.3 более требователен к корректности кода, и поэтому сыплет варнингами и предупреждениями. Иногда проблемы более глубокие.
Работа с БД обычно сводится к добавлению и выборке записей из табличек. Здесь тоже есть много нюансов, тонкостей, приемов. Но заниматься только этим, на мой взгляд - скучновато.
При разработке сайтов на Битриксе вы освоите PHP, HTML+CSS и JavaScript. Дальше сможете развивать эти знания по отдельности или вместе. У вас появиться много возможных путей развития. Хотя сам Битрикс - я терпеть не могу.
А еще можно на виндах поднять виртуалку с Linux на котором будет стоять apache, nginx, php, nginx, mysql, postresql, mongodb... ну и все что вам захочится.
Действительно PHPExcel для больших объемов данных не подходит.
Как решение, формируйте эксель данные в формате ODF, можно с расширением XLS. Это открытый XML формат, эксель его понимает. Формировать эти данные можно обычным print-ами, память и ресурсы при этом расходоваться не будут.
Самый простой способ пронять структуру ODF-файла, это сохранять данные из Экселя в формате ODF/XML и посмотреть как они устроены. Потом просто воспроизведите эту структуру на PHP.
Самое тупое но простое решение, сделать выгрузку в формате HTML содержащий одну таблицу, и дать ему расширение xls. Эксель такое переварит при открытии.
Сначала убедитесь, что file_get_contents вообще в состоянии забирать данные хоть с какого нибудь адреса. Потом разберитесь, почему не получается забрать с 192.168.1.38/mypage.
Возможно есть файрволы между php и 192.168.1.38. Попробуйте считать данные не через php, а через какую нибудь утилиту командной строки со стороны php.
Возможно на той стороне проверяются заголовки запроса. Запихайте кроме user-agent вообще все остальные заголовки браузера (перехватите их чтобы понять какие они там есть).
Удобно использовать такую же ОС как та, на которой будет исполняться ваши проекты.
Но при этом, в этой ОС вам может не хватать чего то нужного, поэтому удобно дополнительно иметь вспомогательную ОС в виде виртуальной машины.
Мой вариант:
Linux Ubuntu - Ибо такая же стоит на серверах где работают мои проекты.
Виртуальная Windows - Для запуска Internet Explorer и прочих виндяшных радостей, которым нет нормальной замены на Linux
При массовой вставке или апдейте записей в MySQL очень сильное ускорение можно получить если завернуть пачку INSERT-ов или UPDATE-ов в транзакцию. Можно вообще вообще весь импорт сделать за одну транзакцию, можно разрезать на несколько более мелких транзакций.
Ну а вообще, разберитесь в каком месте у вас все падает или жрет слишком много времени и ресурсов. Разбейте задачу на несколько кусков, и выполните каждую по отдельности.
- чтение данных из удаленного источника
- json парсинг
- формирование SQL команд
- выполнение SQL команд
Тогда поймете, в каком именно месте у вас проблема.
Ну считываете в память эксельный файл через phptoexcel. Смотрите на какой строке данные заканчиваются. И после этой строки добавляете новые данные. Потом сохраняете файл. В чем сложность?
Но я бы лучше данные хранил в БД. И дозапись данных делал бы в БД. А потом бы делал выборку из этой БД и формировал новый эксельный файл с нуля. Меньше граблей будет со всякими блокировками и структурами эксельных файлов.
Судя по их поведению, им этот сайт не очень то и нужен. А вот деньги вам, я полагаю как раз нужны. Если вы удалите сайт, то они обидятся, повозмущаются и плюнут на все это. Так что метод взятия сайта в заложники и последующего шантажа врядли сработает.
Я бы предложил сначала им отправить отправить грамотно составленную досудебную претензию в бумажном виде. (Образцы найдете в интернете) Это покажет вашу серьезность, юридическую грамотность (даже если ее нет :-), и то что вы готовы отстаивать свои права в правовом поле, а не просто ныть. Часто после получения такой бумажки клиенты все выплачивают и до суда дело не доходит.
Ну а при дальнейшем игноре подавайте в суд. Это не так уж и сложно как кажется.
Программисту лучше выучить английский, иначе его жизнь будет полна тягот и страданий. (Если это только не программист 1С)
Чтение пунктов меню на английском, это тоже маленький, но нужный шажок в изучении языка.
Если вы пытаетесь сделать вывод в формате JSON, то может быть лучше сначала запихать выборку из БД в массив-таблицу, а потом вывести все через json_encode().
Я обычно пользуюсь следующими вариантами:
1. Flash messages - написали выше, действительно многие php фреймворки так и делают.
2. Отказываюсь от редиректов, так чтобы можно было вывести и сообщение об ошибке и результат обработки на той же странице, где и происходит действие. Да, это потребует изменение путей пользователя на сайте.
3. Использую AJAX. Это решает сразу кучу проблем. Легко выводить сообщения об ошибках, делать серверную валидацию не теряя содержимого форм, отсутствие сдвигов скролинга страницы, меньше надо думать о пути пользователя по сайту во время обработки действий связанных с изменением данных и т.д.
Еще документ Excel можно сохранить в каком нибудь XML-ном формате. Например в ODF-подобном (OpenOffice его также использует). При этом, в отличие от CSV, вы не потеряете листы, форматирование, формулы и т.д. Эта фича вроде бы во всех совеременных версиях Экселя присутствует по умолчанию. Дальше можете парсить такой файл на PHP через XML парсер, например SimpleXML.
Я так делал, потому что парсинг нативного Эксель формата на PHPExcel требовал оооочень много машинного времени и RAM. А описанный мной способ потребляет мало ресурсов и работает быстро.
P.S.: Пугаться ручного парсинга ODF XML-ки не стоит. Разобраться на уровне достаточном для чтения листов и значений можно за пол часа, даже без документации. Там все очевидно.
Ответ написан
Комментировать
Комментировать
Оценили как «Нравится»
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.